}
+INT
+LsapGetResourceStringLengthEx(
+ _In_ HINSTANCE hInstance,
+ _In_ UINT uId,
+ _In_ USHORT usLanguage)
+{
+ HGLOBAL hmem;
+ HRSRC hrsrc;
+ WCHAR *p;
+ UINT i, string_num;
+
+ /* Use loword (incremented by 1) as resourceid */
+// hrsrc = FindResourceExW(hInstance,
+// MAKEINTRESOURCEW((LOWORD(uId) >> 4) + 1),
+// (LPWSTR)RT_STRING,
+// usLanguage);
+ hrsrc = FindResourceW(hInstance,
+ MAKEINTRESOURCEW((LOWORD(uId) >> 4) + 1),
+ (LPWSTR)RT_STRING);
+ if (!hrsrc)
+ return 0;
+
+ hmem = LoadResource(hInstance, hrsrc);
+ if (!hmem)
+ return 0;
+
+ p = LockResource(hmem);
+ string_num = uId & 0x000f;
+ for (i = 0; i < string_num; i++)
+ p += *p + 1;
+
+ return *p + 1;
+}
+
+
+INT
+LsapLoadStringEx(
+ _In_ HINSTANCE hInstance,
+ _In_ UINT uId,
+ _In_ USHORT usLanguage,
+ _Out_ LPWSTR lpBuffer,
+ _Out_ INT nBufferMax)
+{
+ HGLOBAL hmem;
+ HRSRC hrsrc;
+ WCHAR *p;
+ int string_num;
+ int i;
+
+ /* Use loword (incremented by 1) as resourceid */
+// hrsrc = FindResourceExW(hInstance,
+// MAKEINTRESOURCEW((LOWORD(uId) >> 4) + 1),
+// (LPWSTR)RT_STRING,
+// usLanguage);
+ hrsrc = FindResourceW(hInstance,
+ MAKEINTRESOURCEW((LOWORD(uId) >> 4) + 1),
+ (LPWSTR)RT_STRING);
+ if (!hrsrc)
+ return 0;
+
+ hmem = LoadResource(hInstance, hrsrc);
+ if (!hmem)
+ return 0;
+
+ p = LockResource(hmem);
+ string_num = uId & 0x000f;
+ for (i = 0; i < string_num; i++)
+ p += *p + 1;
+
+ i = min(nBufferMax - 1, *p);
+ if (i > 0)
+ {
+ memcpy(lpBuffer, p + 1, i * sizeof(WCHAR));
+ lpBuffer[i] = 0;
+ }
+ else
+ {
+ if (nBufferMax > 1)
+ {
+ lpBuffer[0] = 0;
+ return 0;
+ }
+ }
+
+ return i;
+}
+
+
PSID
LsapAppendRidToSid(
PSID SrcSid,