2 * PROJECT: ReactOS API Tests
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Tests for CachedGetUserFromSid
5 * COPYRIGHT: Copyright 2020 Serge Gautherie <reactos-git_serge_171003@gautherie.fr>
13 static VOID (WINAPI
*pCachedGetUserFromSid
)(PSID pSid
, LPWSTR pUserName
, PULONG pcwcUserName
);
15 static void test_Sid_Null(void)
17 const WCHAR szUserNameFromNull
[] = L
"(unknown)";
18 const ULONG cchUserNameFromNull
= (ULONG
)wcslen(szUserNameFromNull
);
20 WCHAR szUserName
[UNLEN
+ 1];
23 // First, full success case, to load result into cache.
24 // Otherwise, expect misbehavior/corruption/crash!
25 // Same issues with 'NULL' or '0' arguments.
26 // Behavior changed on NT6.0 then NT6.1+...
28 wmemset(szUserName
, L
'?', _countof(szUserName
));
29 cchUserName
= _countof(szUserName
);
30 pCachedGetUserFromSid(NULL
, szUserName
, &cchUserName
);
31 ok(cchUserName
== cchUserNameFromNull
, "cchUserName: expected %lu, got %lu\n", cchUserNameFromNull
, cchUserName
);
32 ok(wcscmp(szUserName
, szUserNameFromNull
) == 0, "szUserName: expected \"%S\", got \"%.*S\"\n", szUserNameFromNull
, (int)cchUserName
, szUserName
);
34 wmemset(szUserName
, L
'?', _countof(szUserName
));
36 pCachedGetUserFromSid(NULL
, szUserName
, &cchUserName
);
37 ok(cchUserName
== 0, "cchUserName: expected 0, got %lu\n", cchUserName
);
38 ok(szUserName
[0] == UNICODE_NULL
, "szUserName: missing UNICODE_NULL, got \"%.*S\"\n", (int)cchUserName
, szUserName
);
40 wmemset(szUserName
, L
'?', _countof(szUserName
));
42 pCachedGetUserFromSid(NULL
, szUserName
, &cchUserName
);
43 ok(cchUserName
== 1, "cchUserName: expected 0, got %lu\n", cchUserName
);
44 ok(szUserName
[1] == UNICODE_NULL
, "szUserName: missing UNICODE_NULL, got \"%.*S\"\n", (int)cchUserName
, szUserName
);
45 ok(wcsncmp(szUserName
, szUserNameFromNull
, 1) == 0, "szUserName: expected \"%.*S\", got \"%.*S\"\n", 1, szUserNameFromNull
, (int)cchUserName
, szUserName
);
47 wmemset(szUserName
, L
'?', _countof(szUserName
));
48 cchUserName
= cchUserNameFromNull
;
49 pCachedGetUserFromSid(NULL
, szUserName
, &cchUserName
);
50 ok(cchUserName
== cchUserNameFromNull
- 1, "cchUserName: expected %lu, got %lu\n", cchUserNameFromNull
- 1, cchUserName
);
51 ok(szUserName
[cchUserNameFromNull
- 1] == UNICODE_NULL
, "szUserName: missing UNICODE_NULL, got \"%.*S\"\n", (int)cchUserName
, szUserName
);
52 ok(wcsncmp(szUserName
, szUserNameFromNull
, cchUserNameFromNull
- 1) == 0, "szUserName: expected \"%.*S\", got \"%.*S\"\n", (int)cchUserNameFromNull
- 1, szUserNameFromNull
, (int)cchUserName
, szUserName
);
54 wmemset(szUserName
, L
'?', _countof(szUserName
));
55 cchUserName
= cchUserNameFromNull
+ 1;
56 pCachedGetUserFromSid(NULL
, szUserName
, &cchUserName
);
57 ok(cchUserName
== cchUserNameFromNull
, "cchUserName: expected %lu, got %lu\n", cchUserNameFromNull
, cchUserName
);
58 ok(wcscmp(szUserName
, szUserNameFromNull
) == 0, "szUserName: expected \"%S\", got \"%.*S\"\n", szUserNameFromNull
, (int)cchUserName
, szUserName
);
61 START_TEST(CachedGetUserFromSid
)
63 const char szFunction
[] = "CachedGetUserFromSid";
65 // TODO: Dynamically checking, until ReactOS implements this dll.
66 HMODULE hModule
= LoadLibraryW(L
"utildll.dll");
67 DWORD dwLE
= GetLastError();
71 ok(FALSE
, "LoadLibraryW(\"%S\") failed! (dwLE = %lu)\n", L
"utildll.dll", dwLE
);
77 void *pFunction
= (void *)GetProcAddress(hModule
, szFunction
);
78 dwLE
= GetLastError();
82 ok(FALSE
, "GetProcAddress(\"%s\") failed! (dwLE = %lu)\n", szFunction
, dwLE
);
84 skip("No function\n");
89 pCachedGetUserFromSid
= pFunction
;