[LSASRV]
[reactos.git] / reactos / dll / win32 / lsasrv / utils.c
index 6db656d..11ad930 100644 (file)
@@ -60,6 +60,94 @@ LsapLoadString(HINSTANCE hInstance,
 }
 
 
+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,