mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:32:56 +00:00
[ADVAPI32_WINETEST]
* Sync with Wine 1.7.17. CORE-8080 svn path=/trunk/; revision=62781
This commit is contained in:
parent
8b86c3ee99
commit
7417488583
7 changed files with 1132 additions and 278 deletions
|
@ -187,7 +187,7 @@ static void test_CredReadDomainCredentialsA(void)
|
||||||
char target_name[] = "no_such_target";
|
char target_name[] = "no_such_target";
|
||||||
CREDENTIAL_TARGET_INFORMATIONA info = {target_name, NULL, target_name, NULL, NULL, NULL, NULL, 0, 0, NULL};
|
CREDENTIAL_TARGET_INFORMATIONA info = {target_name, NULL, target_name, NULL, NULL, NULL, NULL, 0, 0, NULL};
|
||||||
DWORD count;
|
DWORD count;
|
||||||
PCREDENTIAL* creds;
|
PCREDENTIALA* creds;
|
||||||
|
|
||||||
if (!pCredReadDomainCredentialsA)
|
if (!pCredReadDomainCredentialsA)
|
||||||
{
|
{
|
||||||
|
@ -563,14 +563,65 @@ static void test_CredMarshalCredentialA(void)
|
||||||
|
|
||||||
static void test_CredUnmarshalCredentialA(void)
|
static void test_CredUnmarshalCredentialA(void)
|
||||||
{
|
{
|
||||||
static WCHAR tW[] = {'t',0};
|
static const UCHAR cert_empty[CERT_HASH_LENGTH] = {0};
|
||||||
static WCHAR testW[] = {'t','e','s','t',0};
|
static const UCHAR cert_wine[CERT_HASH_LENGTH] = {'W','i','n','e',0};
|
||||||
|
static const WCHAR tW[] = {'t',0};
|
||||||
|
static const WCHAR teW[] = {'t','e',0};
|
||||||
|
static const WCHAR tesW[] = {'t','e','s',0};
|
||||||
|
static const WCHAR testW[] = {'t','e','s','t',0};
|
||||||
|
void *p;
|
||||||
CERT_CREDENTIAL_INFO *cert;
|
CERT_CREDENTIAL_INFO *cert;
|
||||||
|
const UCHAR *hash;
|
||||||
USERNAME_TARGET_CREDENTIAL_INFO *username;
|
USERNAME_TARGET_CREDENTIAL_INFO *username;
|
||||||
CRED_MARSHAL_TYPE type;
|
CRED_MARSHAL_TYPE type;
|
||||||
unsigned int i;
|
unsigned int i, j;
|
||||||
DWORD error;
|
DWORD error;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
const struct {
|
||||||
|
const char *cred;
|
||||||
|
CRED_MARSHAL_TYPE type;
|
||||||
|
const void *unmarshaled;
|
||||||
|
} tests[] = {
|
||||||
|
{ "", 0, NULL },
|
||||||
|
{ "@", 0, NULL },
|
||||||
|
{ "@@", 0, NULL },
|
||||||
|
{ "@@@", 0, NULL },
|
||||||
|
{ "@@A", 0, NULL },
|
||||||
|
{ "@@E", 4, NULL },
|
||||||
|
{ "@@Z", 25, NULL },
|
||||||
|
{ "@@a", 26, NULL },
|
||||||
|
{ "@@0", 52, NULL },
|
||||||
|
{ "@@#", 62, NULL },
|
||||||
|
{ "@@-", 63, NULL },
|
||||||
|
{ "@@B", CertCredential, NULL },
|
||||||
|
{ "@@BA", CertCredential, NULL },
|
||||||
|
{ "@@BAAAAAAAAAAAAAAAAAAAAAAAAAA", CertCredential, NULL },
|
||||||
|
{ "@@BAAAAAAAAAAAAAAAAAAAAAAAAAAAA", CertCredential, NULL },
|
||||||
|
{ "@@BAAAAAAAAAAAAAAAAAAAAAAAAAAA", CertCredential, cert_empty },
|
||||||
|
{ "@@BXlmblBAAAAAAAAAAAAAAAAAAAAA", CertCredential, cert_wine },
|
||||||
|
{ "@@C", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CAAAAAA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CAAAAAA0B", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CAAAAAA0BA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CCAAAAA0BA", UsernameTargetCredential, tW },
|
||||||
|
{ "@@CEAAAAA0BA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CEAAAAA0BAd", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CEAAAAA0BAdA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CEAAAAA0BQZAA", UsernameTargetCredential, teW },
|
||||||
|
{ "@@CEAAAAA0BQZAQ", UsernameTargetCredential, teW },
|
||||||
|
{ "@@CEAAAAA0BQZAg", UsernameTargetCredential, teW },
|
||||||
|
{ "@@CEAAAAA0BQZAw", UsernameTargetCredential, teW },
|
||||||
|
{ "@@CEAAAAA0BQZAAA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CGAAAAA0BQZAMH", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CGAAAAA0BQZAMHA", UsernameTargetCredential, tesW },
|
||||||
|
{ "@@CGAAAAA0BQZAMHAA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CCAAAAA0BAA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CBAAAAA0BAA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CAgAAAA0BAA", UsernameTargetCredential, NULL },
|
||||||
|
{ "@@CIAAAAA0BQZAMHA0BA", UsernameTargetCredential, testW },
|
||||||
|
{ "@@CA-----0BQZAMHA0BA", UsernameTargetCredential, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
SetLastError( 0xdeadbeef );
|
SetLastError( 0xdeadbeef );
|
||||||
ret = pCredUnmarshalCredentialA( NULL, NULL, NULL );
|
ret = pCredUnmarshalCredentialA( NULL, NULL, NULL );
|
||||||
|
@ -593,14 +644,6 @@ static void test_CredUnmarshalCredentialA(void)
|
||||||
ok( !ret, "unexpected success\n" );
|
ok( !ret, "unexpected success\n" );
|
||||||
ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
|
ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
|
||||||
|
|
||||||
type = 0;
|
|
||||||
cert = NULL;
|
|
||||||
SetLastError( 0xdeadbeef );
|
|
||||||
ret = pCredUnmarshalCredentialA( "", &type, (void **)&cert );
|
|
||||||
error = GetLastError();
|
|
||||||
ok( !ret, "unexpected success\n" );
|
|
||||||
ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
|
|
||||||
|
|
||||||
if (0) { /* crash */
|
if (0) { /* crash */
|
||||||
SetLastError( 0xdeadbeef );
|
SetLastError( 0xdeadbeef );
|
||||||
ret = pCredUnmarshalCredentialA( "@@BAAAAAAAAAAAAAAAAAAAAAAAAAAA", &type, NULL );
|
ret = pCredUnmarshalCredentialA( "@@BAAAAAAAAAAAAAAAAAAAAAAAAAAA", &type, NULL );
|
||||||
|
@ -615,69 +658,46 @@ static void test_CredUnmarshalCredentialA(void)
|
||||||
ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
|
ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
|
||||||
}
|
}
|
||||||
|
|
||||||
type = 0;
|
for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
|
||||||
cert = NULL;
|
{
|
||||||
ret = pCredUnmarshalCredentialA( "@@BAAAAAAAAAAAAAAAAAAAAAAAAAAA", &type, (void **)&cert );
|
SetLastError(0xdeadbeef);
|
||||||
ok( ret, "unexpected failure %u\n", GetLastError() );
|
type = 0;
|
||||||
ok( type == CertCredential, "got %u\n", type );
|
p = NULL;
|
||||||
ok( cert != NULL, "cert is NULL\n" );
|
ret = pCredUnmarshalCredentialA(tests[i].cred, &type, &p);
|
||||||
ok( cert->cbSize == sizeof(*cert), "wrong size %u\n", cert->cbSize );
|
error = GetLastError();
|
||||||
for (i = 0; i < sizeof(cert->rgbHashOfCert); i++) ok( !cert->rgbHashOfCert[i], "wrong data\n" );
|
if (tests[i].unmarshaled)
|
||||||
pCredFree( cert );
|
{
|
||||||
|
ok(ret, "[%u] unexpected failure %u\n", i, error);
|
||||||
|
ok(type == tests[i].type, "[%u] got %u\n", i, type);
|
||||||
|
ok(p != NULL, "[%u] returned pointer is NULL\n", i);
|
||||||
|
if (tests[i].type == CertCredential)
|
||||||
|
{
|
||||||
|
cert = p;
|
||||||
|
hash = tests[i].unmarshaled;
|
||||||
|
ok(cert->cbSize == sizeof(*cert),
|
||||||
|
"[%u] wrong size %u\n", i, cert->cbSize);
|
||||||
|
for (j = 0; j < sizeof(cert->rgbHashOfCert); j++)
|
||||||
|
ok(cert->rgbHashOfCert[j] == hash[j], "[%u] wrong data\n", i);
|
||||||
|
}
|
||||||
|
else if (tests[i].type == UsernameTargetCredential)
|
||||||
|
{
|
||||||
|
username = p;
|
||||||
|
ok(username->UserName != NULL, "[%u] UserName is NULL\n", i);
|
||||||
|
ok(!lstrcmpW(username->UserName, tests[i].unmarshaled),
|
||||||
|
"[%u] got %s\n", i, wine_dbgstr_w(username->UserName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ok(!ret, "[%u] unexpected success\n", i);
|
||||||
|
ok(error == ERROR_INVALID_PARAMETER, "[%u] got %u\n", i, error);
|
||||||
|
ok(type == tests[i].type, "[%u] got %u\n", i, type);
|
||||||
|
ok(p == NULL, "[%u] returned pointer is not NULL\n", i);
|
||||||
|
}
|
||||||
|
|
||||||
type = 0;
|
if (ret)
|
||||||
cert = NULL;
|
pCredFree(p);
|
||||||
ret = pCredUnmarshalCredentialA( "@@BXlmblBAAAAAAAAAAAAAAAAAAAAA", &type, (void **)&cert );
|
}
|
||||||
ok( ret, "unexpected failure %u\n", GetLastError() );
|
|
||||||
ok( type == CertCredential, "got %u\n", type );
|
|
||||||
ok( cert != NULL, "cert is NULL\n" );
|
|
||||||
ok( cert->cbSize == sizeof(*cert), "wrong size %u\n", cert->cbSize );
|
|
||||||
ok( cert->rgbHashOfCert[0] == 'W', "wrong data)\n" );
|
|
||||||
ok( cert->rgbHashOfCert[1] == 'i', "wrong data\n" );
|
|
||||||
ok( cert->rgbHashOfCert[2] == 'n', "wrong data\n" );
|
|
||||||
ok( cert->rgbHashOfCert[3] == 'e', "wrong data\n" );
|
|
||||||
for (i = 4; i < sizeof(cert->rgbHashOfCert); i++) ok( !cert->rgbHashOfCert[i], "wrong data\n" );
|
|
||||||
pCredFree( cert );
|
|
||||||
|
|
||||||
SetLastError( 0xdeadbeef );
|
|
||||||
ret = pCredUnmarshalCredentialA( "@@CAAAAAA", &type, (void **)&username );
|
|
||||||
error = GetLastError();
|
|
||||||
ok( !ret, "unexpected success\n" );
|
|
||||||
ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
|
|
||||||
|
|
||||||
SetLastError( 0xdeadbeef );
|
|
||||||
ret = pCredUnmarshalCredentialA( "@@CAAAAAA0BA", &type, (void **)&username );
|
|
||||||
error = GetLastError();
|
|
||||||
ok( !ret, "unexpected success\n" );
|
|
||||||
ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
|
|
||||||
|
|
||||||
type = 0;
|
|
||||||
username = NULL;
|
|
||||||
ret = pCredUnmarshalCredentialA( "@@CCAAAAA0BA", &type, (void **)&username );
|
|
||||||
ok( ret, "unexpected failure %u\n", GetLastError() );
|
|
||||||
ok( type == UsernameTargetCredential, "got %u\n", type );
|
|
||||||
ok( username != NULL, "username is NULL\n" );
|
|
||||||
ok( username->UserName != NULL, "UserName is NULL\n" );
|
|
||||||
ok( !lstrcmpW( username->UserName, tW ), "got %s\n", wine_dbgstr_w(username->UserName) );
|
|
||||||
pCredFree( username );
|
|
||||||
|
|
||||||
type = 0;
|
|
||||||
username = NULL;
|
|
||||||
ret = pCredUnmarshalCredentialA( "@@CIAAAAA0BQZAMHA0BA", &type, (void **)&username );
|
|
||||||
ok( ret, "unexpected failure %u\n", GetLastError() );
|
|
||||||
ok( type == UsernameTargetCredential, "got %u\n", type );
|
|
||||||
ok( username != NULL, "username is NULL\n" );
|
|
||||||
ok( username->UserName != NULL, "UserName is NULL\n" );
|
|
||||||
ok( !lstrcmpW( username->UserName, testW ), "got %s\n", wine_dbgstr_w(username->UserName) );
|
|
||||||
pCredFree( username );
|
|
||||||
|
|
||||||
type = 0;
|
|
||||||
username = NULL;
|
|
||||||
SetLastError( 0xdeadbeef );
|
|
||||||
ret = pCredUnmarshalCredentialA( "@@CA-----0BQZAMHA0BA", &type, (void **)&username );
|
|
||||||
error = GetLastError();
|
|
||||||
ok( !ret, "unexpected success\n" );
|
|
||||||
ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_CredIsMarshaledCredentialA(void)
|
static void test_CredIsMarshaledCredentialA(void)
|
||||||
|
@ -744,18 +764,19 @@ static void test_CredIsMarshaledCredentialA(void)
|
||||||
START_TEST(cred)
|
START_TEST(cred)
|
||||||
{
|
{
|
||||||
DWORD persists[CRED_TYPE_MAXIMUM];
|
DWORD persists[CRED_TYPE_MAXIMUM];
|
||||||
|
HMODULE mod = GetModuleHandleA("advapi32.dll");
|
||||||
|
|
||||||
pCredEnumerateA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredEnumerateA");
|
pCredEnumerateA = (void *)GetProcAddress(mod, "CredEnumerateA");
|
||||||
pCredFree = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredFree");
|
pCredFree = (void *)GetProcAddress(mod, "CredFree");
|
||||||
pCredGetSessionTypes = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredGetSessionTypes");
|
pCredGetSessionTypes = (void *)GetProcAddress(mod, "CredGetSessionTypes");
|
||||||
pCredWriteA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredWriteA");
|
pCredWriteA = (void *)GetProcAddress(mod, "CredWriteA");
|
||||||
pCredDeleteA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredDeleteA");
|
pCredDeleteA = (void *)GetProcAddress(mod, "CredDeleteA");
|
||||||
pCredReadA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredReadA");
|
pCredReadA = (void *)GetProcAddress(mod, "CredReadA");
|
||||||
pCredRenameA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredRenameA");
|
pCredRenameA = (void *)GetProcAddress(mod, "CredRenameA");
|
||||||
pCredReadDomainCredentialsA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredReadDomainCredentialsA");
|
pCredReadDomainCredentialsA = (void *)GetProcAddress(mod, "CredReadDomainCredentialsA");
|
||||||
pCredMarshalCredentialA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredMarshalCredentialA");
|
pCredMarshalCredentialA = (void *)GetProcAddress(mod, "CredMarshalCredentialA");
|
||||||
pCredUnmarshalCredentialA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredUnmarshalCredentialA");
|
pCredUnmarshalCredentialA = (void *)GetProcAddress(mod, "CredUnmarshalCredentialA");
|
||||||
pCredIsMarshaledCredentialA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredIsMarshaledCredentialA");
|
pCredIsMarshaledCredentialA = (void *)GetProcAddress(mod, "CredIsMarshaledCredentialA");
|
||||||
|
|
||||||
if (!pCredEnumerateA || !pCredFree || !pCredWriteA || !pCredDeleteA || !pCredReadA)
|
if (!pCredEnumerateA || !pCredFree || !pCredWriteA || !pCredDeleteA || !pCredReadA)
|
||||||
{
|
{
|
||||||
|
|
|
@ -474,21 +474,21 @@ static BOOL FindProvRegVals(DWORD dwIndex, DWORD *pdwProvType, LPSTR *pszProvNam
|
||||||
HKEY subkey;
|
HKEY subkey;
|
||||||
DWORD size = sizeof(DWORD);
|
DWORD size = sizeof(DWORD);
|
||||||
|
|
||||||
if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Cryptography\\Defaults\\Provider", &hKey))
|
if (RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Cryptography\\Defaults\\Provider", &hKey))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
RegQueryInfoKey(hKey, NULL, NULL, NULL, pdwProvCount, pcbProvName,
|
RegQueryInfoKeyA(hKey, NULL, NULL, NULL, pdwProvCount, pcbProvName,
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||||
(*pcbProvName)++;
|
(*pcbProvName)++;
|
||||||
|
|
||||||
if (!(*pszProvName = LocalAlloc(LMEM_ZEROINIT, *pcbProvName)))
|
if (!(*pszProvName = LocalAlloc(LMEM_ZEROINIT, *pcbProvName)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
RegEnumKeyEx(hKey, dwIndex, *pszProvName, pcbProvName, NULL, NULL, NULL, NULL);
|
RegEnumKeyExA(hKey, dwIndex, *pszProvName, pcbProvName, NULL, NULL, NULL, NULL);
|
||||||
(*pcbProvName)++;
|
(*pcbProvName)++;
|
||||||
|
|
||||||
RegOpenKey(hKey, *pszProvName, &subkey);
|
RegOpenKeyA(hKey, *pszProvName, &subkey);
|
||||||
RegQueryValueEx(subkey, "Type", NULL, NULL, (LPBYTE)pdwProvType, &size);
|
RegQueryValueExA(subkey, "Type", NULL, NULL, (LPBYTE)pdwProvType, &size);
|
||||||
|
|
||||||
RegCloseKey(subkey);
|
RegCloseKey(subkey);
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
|
@ -599,10 +599,10 @@ static BOOL FindProvTypesRegVals(DWORD *pdwIndex, DWORD *pdwProvType, LPSTR *psz
|
||||||
DWORD cbName;
|
DWORD cbName;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
|
|
||||||
if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Cryptography\\Defaults\\Provider Types", &hKey))
|
if (RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Cryptography\\Defaults\\Provider Types", &hKey))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (RegQueryInfoKey(hKey, NULL, NULL, NULL, pdwTypeCount, &cbName, NULL,
|
if (RegQueryInfoKeyA(hKey, NULL, NULL, NULL, pdwTypeCount, &cbName, NULL,
|
||||||
NULL, NULL, NULL, NULL, NULL))
|
NULL, NULL, NULL, NULL, NULL))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
cbName++;
|
cbName++;
|
||||||
|
@ -610,7 +610,7 @@ static BOOL FindProvTypesRegVals(DWORD *pdwIndex, DWORD *pdwProvType, LPSTR *psz
|
||||||
if (!(szName = LocalAlloc(LMEM_ZEROINIT, cbName)))
|
if (!(szName = LocalAlloc(LMEM_ZEROINIT, cbName)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
while (!RegEnumKeyEx(hKey, *pdwIndex, szName, &cbName, NULL, NULL, NULL, NULL))
|
while (!RegEnumKeyExA(hKey, *pdwIndex, szName, &cbName, NULL, NULL, NULL, NULL))
|
||||||
{
|
{
|
||||||
cbName++;
|
cbName++;
|
||||||
ch = szName + strlen(szName);
|
ch = szName + strlen(szName);
|
||||||
|
@ -619,15 +619,15 @@ static BOOL FindProvTypesRegVals(DWORD *pdwIndex, DWORD *pdwProvType, LPSTR *psz
|
||||||
*pdwProvType += (*(--ch) - '0') * 10;
|
*pdwProvType += (*(--ch) - '0') * 10;
|
||||||
*pdwProvType += (*(--ch) - '0') * 100;
|
*pdwProvType += (*(--ch) - '0') * 100;
|
||||||
|
|
||||||
if (RegOpenKey(hKey, szName, &hSubKey))
|
if (RegOpenKeyA(hKey, szName, &hSubKey))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!RegQueryValueEx(hSubKey, "TypeName", NULL, NULL, NULL, pcbTypeName))
|
if (!RegQueryValueExA(hSubKey, "TypeName", NULL, NULL, NULL, pcbTypeName))
|
||||||
{
|
{
|
||||||
if (!(*pszTypeName = LocalAlloc(LMEM_ZEROINIT, *pcbTypeName)))
|
if (!(*pszTypeName = LocalAlloc(LMEM_ZEROINIT, *pcbTypeName)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!RegQueryValueEx(hSubKey, "TypeName", NULL, NULL, (LPBYTE)*pszTypeName, pcbTypeName))
|
if (!RegQueryValueExA(hSubKey, "TypeName", NULL, NULL, (LPBYTE)*pszTypeName, pcbTypeName))
|
||||||
{
|
{
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
break;
|
break;
|
||||||
|
@ -763,14 +763,14 @@ static BOOL FindDfltProvRegVals(DWORD dwProvType, DWORD dwFlags, LPSTR *pszProvN
|
||||||
} else
|
} else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (RegOpenKey((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE ,keyname, &hKey))
|
if (RegOpenKeyA((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE ,keyname, &hKey))
|
||||||
{
|
{
|
||||||
LocalFree(keyname);
|
LocalFree(keyname);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
LocalFree(keyname);
|
LocalFree(keyname);
|
||||||
|
|
||||||
if (RegQueryValueEx(hKey, "Name", NULL, NULL, (LPBYTE)*pszProvName, pcbProvName))
|
if (RegQueryValueExA(hKey, "Name", NULL, NULL, (LPBYTE)*pszProvName, pcbProvName))
|
||||||
{
|
{
|
||||||
if (GetLastError() != ERROR_MORE_DATA)
|
if (GetLastError() != ERROR_MORE_DATA)
|
||||||
SetLastError(NTE_PROV_TYPE_ENTRY_BAD);
|
SetLastError(NTE_PROV_TYPE_ENTRY_BAD);
|
||||||
|
@ -780,7 +780,7 @@ static BOOL FindDfltProvRegVals(DWORD dwProvType, DWORD dwFlags, LPSTR *pszProvN
|
||||||
if (!(*pszProvName = LocalAlloc(LMEM_ZEROINIT, *pcbProvName)))
|
if (!(*pszProvName = LocalAlloc(LMEM_ZEROINIT, *pcbProvName)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (RegQueryValueEx(hKey, "Name", NULL, NULL, (LPBYTE)*pszProvName, pcbProvName))
|
if (RegQueryValueExA(hKey, "Name", NULL, NULL, (LPBYTE)*pszProvName, pcbProvName))
|
||||||
{
|
{
|
||||||
if (GetLastError() != ERROR_MORE_DATA)
|
if (GetLastError() != ERROR_MORE_DATA)
|
||||||
SetLastError(NTE_PROV_TYPE_ENTRY_BAD);
|
SetLastError(NTE_PROV_TYPE_ENTRY_BAD);
|
||||||
|
@ -899,13 +899,13 @@ static void test_set_provider_ex(void)
|
||||||
ok(result, "%d\n", GetLastError());
|
ok(result, "%d\n", GetLastError());
|
||||||
|
|
||||||
/* check pdwReserved for NULL */
|
/* check pdwReserved for NULL */
|
||||||
result = pCryptSetProviderExA(MS_DEF_PROV, PROV_RSA_FULL, ¬Null, CRYPT_MACHINE_DEFAULT);
|
result = pCryptSetProviderExA(MS_DEF_PROV_A, PROV_RSA_FULL, ¬Null, CRYPT_MACHINE_DEFAULT);
|
||||||
ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "expected %i, got %d\n",
|
ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "expected %i, got %d\n",
|
||||||
ERROR_INVALID_PARAMETER, GetLastError());
|
ERROR_INVALID_PARAMETER, GetLastError());
|
||||||
|
|
||||||
/* remove the default provider and then set it to MS_DEF_PROV/PROV_RSA_FULL */
|
/* remove the default provider and then set it to MS_DEF_PROV/PROV_RSA_FULL */
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
result = pCryptSetProviderExA(MS_DEF_PROV, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT | CRYPT_DELETE_DEFAULT);
|
result = pCryptSetProviderExA(MS_DEF_PROV_A, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT | CRYPT_DELETE_DEFAULT);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
ok( GetLastError() == ERROR_ACCESS_DENIED || broken(GetLastError() == ERROR_INVALID_PARAMETER),
|
ok( GetLastError() == ERROR_ACCESS_DENIED || broken(GetLastError() == ERROR_INVALID_PARAMETER),
|
||||||
|
@ -915,7 +915,7 @@ static void test_set_provider_ex(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = pCryptSetProviderExA(MS_DEF_PROV, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT);
|
result = pCryptSetProviderExA(MS_DEF_PROV_A, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT);
|
||||||
ok(result, "%d\n", GetLastError());
|
ok(result, "%d\n", GetLastError());
|
||||||
|
|
||||||
/* call CryptGetDefaultProvider to see if they match */
|
/* call CryptGetDefaultProvider to see if they match */
|
||||||
|
@ -925,13 +925,13 @@ static void test_set_provider_ex(void)
|
||||||
goto reset;
|
goto reset;
|
||||||
|
|
||||||
result = pCryptGetDefaultProviderA(PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT, pszProvName, &cbProvName);
|
result = pCryptGetDefaultProviderA(PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT, pszProvName, &cbProvName);
|
||||||
ok(result && !strcmp(MS_DEF_PROV, pszProvName), "expected %s, got %s\n", MS_DEF_PROV, pszProvName);
|
ok(result && !strcmp(MS_DEF_PROV_A, pszProvName), "expected %s, got %s\n", MS_DEF_PROV_A, pszProvName);
|
||||||
ok(result && cbProvName==(strlen(MS_DEF_PROV) + 1), "expected %i, got %d\n", (lstrlenA(MS_DEF_PROV) + 1), cbProvName);
|
ok(result && cbProvName==(strlen(MS_DEF_PROV_A) + 1), "expected %i, got %d\n", (lstrlenA(MS_DEF_PROV_A) + 1), cbProvName);
|
||||||
|
|
||||||
LocalFree(pszProvName);
|
LocalFree(pszProvName);
|
||||||
|
|
||||||
reset:
|
reset:
|
||||||
/* Set the provider back to it's original */
|
/* Set the provider back to its original */
|
||||||
result = pCryptSetProviderExA(curProvName, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT);
|
result = pCryptSetProviderExA(curProvName, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT);
|
||||||
ok(result, "%d\n", GetLastError());
|
ok(result, "%d\n", GetLastError());
|
||||||
LocalFree(curProvName);
|
LocalFree(curProvName);
|
||||||
|
@ -1026,7 +1026,7 @@ static void test_rc2_keylen(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pCryptAcquireContextA(&provider, NULL, MS_DEF_PROV,
|
ret = pCryptAcquireContextA(&provider, NULL, MS_DEF_PROV_A,
|
||||||
PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
|
PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
|
||||||
ok(ret, "CryptAcquireContext error %08x\n", GetLastError());
|
ok(ret, "CryptAcquireContext error %08x\n", GetLastError());
|
||||||
|
|
||||||
|
@ -1140,6 +1140,38 @@ static void test_SystemFunction036(void)
|
||||||
ok(ret == TRUE, "Expected SystemFunction036 to return TRUE, got %d\n", ret);
|
ok(ret == TRUE, "Expected SystemFunction036 to return TRUE, got %d\n", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_container_sd(void)
|
||||||
|
{
|
||||||
|
HCRYPTPROV prov;
|
||||||
|
SECURITY_DESCRIPTOR *sd;
|
||||||
|
DWORD len, err;
|
||||||
|
BOOL ret;
|
||||||
|
|
||||||
|
ret = CryptAcquireContextA(&prov, "winetest", "Microsoft Enhanced Cryptographic Provider v1.0",
|
||||||
|
PROV_RSA_FULL, CRYPT_MACHINE_KEYSET|CRYPT_NEWKEYSET);
|
||||||
|
ok(ret, "got %u\n", GetLastError());
|
||||||
|
|
||||||
|
len = 0;
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptGetProvParam(prov, PP_KEYSET_SEC_DESCR, NULL, &len, OWNER_SECURITY_INFORMATION);
|
||||||
|
err = GetLastError();
|
||||||
|
ok(ret, "got %u\n", err);
|
||||||
|
ok(err == ERROR_INSUFFICIENT_BUFFER || broken(err == ERROR_INVALID_PARAMETER), "got %u\n", err);
|
||||||
|
ok(len, "expected len > 0\n");
|
||||||
|
|
||||||
|
sd = HeapAlloc(GetProcessHeap(), 0, len);
|
||||||
|
ret = CryptGetProvParam(prov, PP_KEYSET_SEC_DESCR, (BYTE *)sd, &len, OWNER_SECURITY_INFORMATION);
|
||||||
|
ok(ret, "got %u\n", GetLastError());
|
||||||
|
HeapFree(GetProcessHeap(), 0, sd);
|
||||||
|
|
||||||
|
ret = CryptReleaseContext(prov, 0);
|
||||||
|
ok(ret, "got %u\n", GetLastError());
|
||||||
|
|
||||||
|
ret = CryptAcquireContextA(&prov, "winetest", "Microsoft Enhanced Cryptographic Provider v1.0",
|
||||||
|
PROV_RSA_FULL, CRYPT_MACHINE_KEYSET|CRYPT_DELETEKEYSET);
|
||||||
|
ok(ret, "got %u\n", GetLastError());
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(crypt)
|
START_TEST(crypt)
|
||||||
{
|
{
|
||||||
init_function_pointers();
|
init_function_pointers();
|
||||||
|
@ -1151,6 +1183,7 @@ START_TEST(crypt)
|
||||||
test_incorrect_api_usage();
|
test_incorrect_api_usage();
|
||||||
test_verify_sig();
|
test_verify_sig();
|
||||||
test_machine_guid();
|
test_machine_guid();
|
||||||
|
test_container_sd();
|
||||||
clean_up_environment();
|
clean_up_environment();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,17 +49,27 @@ static void init_function_pointers(void)
|
||||||
pWow64RevertWow64FsRedirection = (void*)GetProcAddress(hkernel32, "Wow64RevertWow64FsRedirection");
|
pWow64RevertWow64FsRedirection = (void*)GetProcAddress(hkernel32, "Wow64RevertWow64FsRedirection");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void create_backup(const char *filename)
|
static BOOL create_backup(const char *filename)
|
||||||
{
|
{
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
|
DWORD rc, attribs;
|
||||||
|
|
||||||
DeleteFileA(filename);
|
DeleteFileA(filename);
|
||||||
handle = OpenEventLogA(NULL, "Application");
|
handle = OpenEventLogA(NULL, "Application");
|
||||||
BackupEventLogA(handle, filename);
|
rc = BackupEventLogA(handle, filename);
|
||||||
|
if (!rc && GetLastError() == ERROR_PRIVILEGE_NOT_HELD)
|
||||||
|
{
|
||||||
|
skip("insufficient privileges to backup the eventlog\n");
|
||||||
|
CloseEventLog(handle);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
ok(rc, "BackupEventLogA failed, le=%u\n", GetLastError());
|
||||||
CloseEventLog(handle);
|
CloseEventLog(handle);
|
||||||
|
|
||||||
|
attribs = GetFileAttributesA(filename);
|
||||||
todo_wine
|
todo_wine
|
||||||
ok(GetFileAttributesA(filename) != INVALID_FILE_ATTRIBUTES, "Expected a backup file\n");
|
ok(attribs != INVALID_FILE_ATTRIBUTES, "Expected a backup file attribs=%#x le=%u\n", attribs, GetLastError());
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_open_close(void)
|
static void test_open_close(void)
|
||||||
|
@ -209,23 +219,24 @@ static void test_count(void)
|
||||||
CloseEventLog(handle);
|
CloseEventLog(handle);
|
||||||
|
|
||||||
/* Make a backup eventlog to work with */
|
/* Make a backup eventlog to work with */
|
||||||
create_backup(backup);
|
if (create_backup(backup))
|
||||||
|
|
||||||
handle = OpenBackupEventLogA(NULL, backup);
|
|
||||||
todo_wine
|
|
||||||
ok(handle != NULL, "Expected a handle\n");
|
|
||||||
|
|
||||||
/* Does GetNumberOfEventLogRecords work with backup eventlogs? */
|
|
||||||
count = 0xdeadbeef;
|
|
||||||
ret = GetNumberOfEventLogRecords(handle, &count);
|
|
||||||
todo_wine
|
|
||||||
{
|
{
|
||||||
ok(ret, "Expected success\n");
|
handle = OpenBackupEventLogA(NULL, backup);
|
||||||
ok(count != 0xdeadbeef, "Expected the number of records\n");
|
todo_wine
|
||||||
}
|
ok(handle != NULL, "Expected a handle, le=%d\n", GetLastError());
|
||||||
|
|
||||||
CloseEventLog(handle);
|
/* Does GetNumberOfEventLogRecords work with backup eventlogs? */
|
||||||
DeleteFileA(backup);
|
count = 0xdeadbeef;
|
||||||
|
ret = GetNumberOfEventLogRecords(handle, &count);
|
||||||
|
todo_wine
|
||||||
|
{
|
||||||
|
ok(ret, "Expected success\n");
|
||||||
|
ok(count != 0xdeadbeef, "Expected the number of records\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseEventLog(handle);
|
||||||
|
DeleteFileA(backup);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_oldest(void)
|
static void test_oldest(void)
|
||||||
|
@ -262,23 +273,24 @@ static void test_oldest(void)
|
||||||
CloseEventLog(handle);
|
CloseEventLog(handle);
|
||||||
|
|
||||||
/* Make a backup eventlog to work with */
|
/* Make a backup eventlog to work with */
|
||||||
create_backup(backup);
|
if (create_backup(backup))
|
||||||
|
|
||||||
handle = OpenBackupEventLogA(NULL, backup);
|
|
||||||
todo_wine
|
|
||||||
ok(handle != NULL, "Expected a handle\n");
|
|
||||||
|
|
||||||
/* Does GetOldestEventLogRecord work with backup eventlogs? */
|
|
||||||
oldest = 0xdeadbeef;
|
|
||||||
ret = GetOldestEventLogRecord(handle, &oldest);
|
|
||||||
todo_wine
|
|
||||||
{
|
{
|
||||||
ok(ret, "Expected success\n");
|
handle = OpenBackupEventLogA(NULL, backup);
|
||||||
ok(oldest != 0xdeadbeef, "Expected the number of the oldest record\n");
|
todo_wine
|
||||||
}
|
ok(handle != NULL, "Expected a handle\n");
|
||||||
|
|
||||||
CloseEventLog(handle);
|
/* Does GetOldestEventLogRecord work with backup eventlogs? */
|
||||||
DeleteFileA(backup);
|
oldest = 0xdeadbeef;
|
||||||
|
ret = GetOldestEventLogRecord(handle, &oldest);
|
||||||
|
todo_wine
|
||||||
|
{
|
||||||
|
ok(ret, "Expected success\n");
|
||||||
|
ok(oldest != 0xdeadbeef, "Expected the number of the oldest record\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseEventLog(handle);
|
||||||
|
DeleteFileA(backup);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_backup(void)
|
static void test_backup(void)
|
||||||
|
@ -306,6 +318,12 @@ static void test_backup(void)
|
||||||
ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||||
|
|
||||||
ret = BackupEventLogA(handle, backup);
|
ret = BackupEventLogA(handle, backup);
|
||||||
|
if (!ret && GetLastError() == ERROR_PRIVILEGE_NOT_HELD)
|
||||||
|
{
|
||||||
|
skip("insufficient privileges for backup tests\n");
|
||||||
|
CloseEventLog(handle);
|
||||||
|
return;
|
||||||
|
}
|
||||||
ok(ret, "Expected success\n");
|
ok(ret, "Expected success\n");
|
||||||
todo_wine
|
todo_wine
|
||||||
ok(GetFileAttributesA(backup) != INVALID_FILE_ATTRIBUTES, "Expected a backup file\n");
|
ok(GetFileAttributesA(backup) != INVALID_FILE_ATTRIBUTES, "Expected a backup file\n");
|
||||||
|
@ -516,39 +534,40 @@ static void test_openbackup(void)
|
||||||
"Expected RPC_S_SERVER_UNAVAILABLE, got %d\n", GetLastError());
|
"Expected RPC_S_SERVER_UNAVAILABLE, got %d\n", GetLastError());
|
||||||
|
|
||||||
/* Make a backup eventlog to work with */
|
/* Make a backup eventlog to work with */
|
||||||
create_backup(backup);
|
if (create_backup(backup))
|
||||||
|
|
||||||
/* FIXME: Wine stops here */
|
|
||||||
if (GetFileAttributesA(backup) == INVALID_FILE_ATTRIBUTES)
|
|
||||||
{
|
{
|
||||||
skip("We don't have a backup eventlog to work with\n");
|
/* FIXME: Wine stops here */
|
||||||
return;
|
if (GetFileAttributesA(backup) == INVALID_FILE_ATTRIBUTES)
|
||||||
|
{
|
||||||
|
skip("We don't have a backup eventlog to work with\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
handle = OpenBackupEventLogA("IDontExist", backup);
|
||||||
|
ok(handle == NULL, "Didn't expect a handle\n");
|
||||||
|
ok(GetLastError() == RPC_S_SERVER_UNAVAILABLE ||
|
||||||
|
GetLastError() == RPC_S_INVALID_NET_ADDR, /* Some Vista and Win7 */
|
||||||
|
"Expected RPC_S_SERVER_UNAVAILABLE, got %d\n", GetLastError());
|
||||||
|
|
||||||
|
/* Empty servername should be read as local server */
|
||||||
|
handle = OpenBackupEventLogA("", backup);
|
||||||
|
ok(handle != NULL, "Expected a handle\n");
|
||||||
|
CloseEventLog(handle);
|
||||||
|
|
||||||
|
handle = OpenBackupEventLogA(NULL, backup);
|
||||||
|
ok(handle != NULL, "Expected a handle\n");
|
||||||
|
|
||||||
|
/* Can we open that same backup eventlog more than once? */
|
||||||
|
handle2 = OpenBackupEventLogA(NULL, backup);
|
||||||
|
ok(handle2 != NULL, "Expected a handle\n");
|
||||||
|
ok(handle2 != handle, "Didn't expect the same handle\n");
|
||||||
|
CloseEventLog(handle2);
|
||||||
|
|
||||||
|
CloseEventLog(handle);
|
||||||
|
DeleteFileA(backup);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
handle = OpenBackupEventLogA("IDontExist", backup);
|
|
||||||
ok(handle == NULL, "Didn't expect a handle\n");
|
|
||||||
ok(GetLastError() == RPC_S_SERVER_UNAVAILABLE ||
|
|
||||||
GetLastError() == RPC_S_INVALID_NET_ADDR, /* Some Vista and Win7 */
|
|
||||||
"Expected RPC_S_SERVER_UNAVAILABLE, got %d\n", GetLastError());
|
|
||||||
|
|
||||||
/* Empty servername should be read as local server */
|
|
||||||
handle = OpenBackupEventLogA("", backup);
|
|
||||||
ok(handle != NULL, "Expected a handle\n");
|
|
||||||
CloseEventLog(handle);
|
|
||||||
|
|
||||||
handle = OpenBackupEventLogA(NULL, backup);
|
|
||||||
ok(handle != NULL, "Expected a handle\n");
|
|
||||||
|
|
||||||
/* Can we open that same backup eventlog more than once? */
|
|
||||||
handle2 = OpenBackupEventLogA(NULL, backup);
|
|
||||||
ok(handle2 != NULL, "Expected a handle\n");
|
|
||||||
ok(handle2 != handle, "Didn't expect the same handle\n");
|
|
||||||
CloseEventLog(handle2);
|
|
||||||
|
|
||||||
CloseEventLog(handle);
|
|
||||||
DeleteFileA(backup);
|
|
||||||
|
|
||||||
/* Is there any content checking done? */
|
/* Is there any content checking done? */
|
||||||
file = CreateFileA(backup, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL);
|
file = CreateFileA(backup, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL);
|
||||||
CloseHandle(file);
|
CloseHandle(file);
|
||||||
|
@ -585,7 +604,8 @@ static void test_clear(void)
|
||||||
ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
|
ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
|
||||||
|
|
||||||
/* Make a backup eventlog to work with */
|
/* Make a backup eventlog to work with */
|
||||||
create_backup(backup);
|
if (!create_backup(backup))
|
||||||
|
return;
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = ClearEventLogA(NULL, backup);
|
ret = ClearEventLogA(NULL, backup);
|
||||||
|
@ -761,11 +781,11 @@ static void test_readwrite(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = ReportEvent(handle, 0x20, 0, 0, NULL, 0, 0, NULL, NULL);
|
ret = ReportEventA(handle, 0x20, 0, 0, NULL, 0, 0, NULL, NULL);
|
||||||
if (!ret && GetLastError() == ERROR_CRC)
|
if (!ret && GetLastError() == ERROR_CRC)
|
||||||
{
|
{
|
||||||
win_skip("Win7 fails when using incorrect event types\n");
|
win_skip("Win7 fails when using incorrect event types\n");
|
||||||
ret = ReportEvent(handle, 0, 0, 0, NULL, 0, 0, NULL, NULL);
|
ret = ReportEventA(handle, 0, 0, 0, NULL, 0, 0, NULL, NULL);
|
||||||
ok(ret, "Expected success : %d\n", GetLastError());
|
ok(ret, "Expected success : %d\n", GetLastError());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -822,9 +842,9 @@ static void test_readwrite(void)
|
||||||
ok(handle != NULL, "Expected a handle\n");
|
ok(handle != NULL, "Expected a handle\n");
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = ReportEvent(handle, read_write[i].evt_type, read_write[i].evt_cat,
|
ret = ReportEventA(handle, read_write[i].evt_type, read_write[i].evt_cat,
|
||||||
read_write[i].evt_id, run_sidtests ? user : NULL,
|
read_write[i].evt_id, run_sidtests ? user : NULL,
|
||||||
read_write[i].evt_numstrings, 0, read_write[i].evt_strings, NULL);
|
read_write[i].evt_numstrings, 0, read_write[i].evt_strings, NULL);
|
||||||
ok(ret, "Expected ReportEvent success : %d\n", GetLastError());
|
ok(ret, "Expected ReportEvent success : %d\n", GetLastError());
|
||||||
|
|
||||||
count = 0xdeadbeef;
|
count = 0xdeadbeef;
|
||||||
|
|
|
@ -49,7 +49,7 @@ static NTSTATUS (WINAPI *pLsaLookupSids)(LSA_HANDLE,ULONG,PSID*,LSA_REFERENCED_D
|
||||||
|
|
||||||
static BOOL init(void)
|
static BOOL init(void)
|
||||||
{
|
{
|
||||||
hadvapi32 = GetModuleHandle("advapi32.dll");
|
hadvapi32 = GetModuleHandleA("advapi32.dll");
|
||||||
|
|
||||||
pLsaClose = (void*)GetProcAddress(hadvapi32, "LsaClose");
|
pLsaClose = (void*)GetProcAddress(hadvapi32, "LsaClose");
|
||||||
pLsaEnumerateAccountRights = (void*)GetProcAddress(hadvapi32, "LsaEnumerateAccountRights");
|
pLsaEnumerateAccountRights = (void*)GetProcAddress(hadvapi32, "LsaEnumerateAccountRights");
|
||||||
|
@ -378,7 +378,7 @@ static void test_LsaLookupSids(void)
|
||||||
ok(ret, "got %d\n", ret);
|
ok(ret, "got %d\n", ret);
|
||||||
|
|
||||||
ret = GetTokenInformation(token, TokenUser, NULL, 0, &size);
|
ret = GetTokenInformation(token, TokenUser, NULL, 0, &size);
|
||||||
ok(!ret, "gotr %d\n", ret);
|
ok(!ret, "got %d\n", ret);
|
||||||
|
|
||||||
user = HeapAlloc(GetProcessHeap(), 0, size);
|
user = HeapAlloc(GetProcessHeap(), 0, size);
|
||||||
ret = GetTokenInformation(token, TokenUser, user, size, &size);
|
ret = GetTokenInformation(token, TokenUser, user, size, &size);
|
||||||
|
|
|
@ -1087,8 +1087,8 @@ static void test_reg_create_key(void)
|
||||||
ok(!ret, "RegCreateKeyExA failed with error %d\n", ret);
|
ok(!ret, "RegCreateKeyExA failed with error %d\n", ret);
|
||||||
|
|
||||||
/* clean up */
|
/* clean up */
|
||||||
RegDeleteKey(hkey2, "");
|
RegDeleteKeyA(hkey2, "");
|
||||||
RegDeleteKey(hkey1, "");
|
RegDeleteKeyA(hkey1, "");
|
||||||
RegCloseKey(hkey2);
|
RegCloseKey(hkey2);
|
||||||
RegCloseKey(hkey1);
|
RegCloseKey(hkey1);
|
||||||
|
|
||||||
|
@ -1106,8 +1106,8 @@ static void test_reg_create_key(void)
|
||||||
ok(!ret, "RegCreateKeyExA failed with error %d\n", ret);
|
ok(!ret, "RegCreateKeyExA failed with error %d\n", ret);
|
||||||
|
|
||||||
/* clean up */
|
/* clean up */
|
||||||
RegDeleteKey(hkey2, "");
|
RegDeleteKeyA(hkey2, "");
|
||||||
RegDeleteKey(hkey1, "");
|
RegDeleteKeyA(hkey1, "");
|
||||||
RegCloseKey(hkey2);
|
RegCloseKey(hkey2);
|
||||||
RegCloseKey(hkey1);
|
RegCloseKey(hkey1);
|
||||||
|
|
||||||
|
@ -1117,7 +1117,7 @@ static void test_reg_create_key(void)
|
||||||
ok(ret == ERROR_BAD_PATHNAME, "expected ERROR_BAD_PATHNAME, got %d\n", ret);
|
ok(ret == ERROR_BAD_PATHNAME, "expected ERROR_BAD_PATHNAME, got %d\n", ret);
|
||||||
else {
|
else {
|
||||||
ok(!ret, "RegCreateKeyExA failed with error %d\n", ret);
|
ok(!ret, "RegCreateKeyExA failed with error %d\n", ret);
|
||||||
RegDeleteKey(hkey1, NULL);
|
RegDeleteKeyA(hkey1, NULL);
|
||||||
RegCloseKey(hkey1);
|
RegCloseKey(hkey1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1251,7 +1251,7 @@ static void test_reg_delete_key(void)
|
||||||
{
|
{
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
|
|
||||||
ret = RegDeleteKey(hkey_main, NULL);
|
ret = RegDeleteKeyA(hkey_main, NULL);
|
||||||
|
|
||||||
/* There is a bug in NT4 and W2K that doesn't check if the subkey is NULL. If
|
/* There is a bug in NT4 and W2K that doesn't check if the subkey is NULL. If
|
||||||
* there are also no subkeys available it will delete the key pointed to by hkey_main.
|
* there are also no subkeys available it will delete the key pointed to by hkey_main.
|
||||||
|
@ -1274,7 +1274,7 @@ static void test_reg_save_key(void)
|
||||||
{
|
{
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
|
|
||||||
ret = RegSaveKey(hkey_main, "saved_key", NULL);
|
ret = RegSaveKeyA(hkey_main, "saved_key", NULL);
|
||||||
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
|
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1283,10 +1283,10 @@ static void test_reg_load_key(void)
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
HKEY hkHandle;
|
HKEY hkHandle;
|
||||||
|
|
||||||
ret = RegLoadKey(HKEY_LOCAL_MACHINE, "Test", "saved_key");
|
ret = RegLoadKeyA(HKEY_LOCAL_MACHINE, "Test", "saved_key");
|
||||||
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
|
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
|
||||||
|
|
||||||
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "Test", &hkHandle);
|
ret = RegOpenKeyA(HKEY_LOCAL_MACHINE, "Test", &hkHandle);
|
||||||
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
|
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
|
||||||
|
|
||||||
RegCloseKey(hkHandle);
|
RegCloseKey(hkHandle);
|
||||||
|
@ -1296,11 +1296,11 @@ static void test_reg_unload_key(void)
|
||||||
{
|
{
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
|
|
||||||
ret = RegUnLoadKey(HKEY_LOCAL_MACHINE, "Test");
|
ret = RegUnLoadKeyA(HKEY_LOCAL_MACHINE, "Test");
|
||||||
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
|
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
|
||||||
|
|
||||||
DeleteFile("saved_key");
|
DeleteFileA("saved_key");
|
||||||
DeleteFile("saved_key.LOG");
|
DeleteFileA("saved_key.LOG");
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL set_privileges(LPCSTR privilege, BOOL set)
|
static BOOL set_privileges(LPCSTR privilege, BOOL set)
|
||||||
|
@ -1312,7 +1312,7 @@ static BOOL set_privileges(LPCSTR privilege, BOOL set)
|
||||||
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
|
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if(!LookupPrivilegeValue(NULL, privilege, &luid))
|
if(!LookupPrivilegeValueA(NULL, privilege, &luid))
|
||||||
{
|
{
|
||||||
CloseHandle(hToken);
|
CloseHandle(hToken);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1668,7 +1668,7 @@ static void test_rw_order(void)
|
||||||
{
|
{
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
DWORD dw = 0;
|
DWORD dw = 0;
|
||||||
static char keyname[] = "test_rw_order";
|
static const char keyname[] = "test_rw_order";
|
||||||
char value_buf[2];
|
char value_buf[2];
|
||||||
DWORD values, value_len, value_name_max_len;
|
DWORD values, value_len, value_name_max_len;
|
||||||
LSTATUS ret;
|
LSTATUS ret;
|
||||||
|
@ -1707,7 +1707,7 @@ static void test_rw_order(void)
|
||||||
ok(!RegEnumValueA(hKey, 3, value_buf, &value_len, NULL, NULL, NULL, NULL), "RegEnumValueA failed\n");
|
ok(!RegEnumValueA(hKey, 3, value_buf, &value_len, NULL, NULL, NULL, NULL), "RegEnumValueA failed\n");
|
||||||
todo_wine ok(strcmp(value_buf, "B") == 0, "Expected name \"B\", got %s\n", value_buf);
|
todo_wine ok(strcmp(value_buf, "B") == 0, "Expected name \"B\", got %s\n", value_buf);
|
||||||
|
|
||||||
ok(!RegDeleteKey(HKEY_CURRENT_USER, keyname), "Failed to delete key\n");
|
ok(!RegDeleteKeyA(HKEY_CURRENT_USER, keyname), "Failed to delete key\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_symlinks(void)
|
static void test_symlinks(void)
|
||||||
|
@ -1825,10 +1825,10 @@ static void test_symlinks(void)
|
||||||
KEY_ALL_ACCESS, NULL, &key, NULL );
|
KEY_ALL_ACCESS, NULL, &key, NULL );
|
||||||
ok( err == ERROR_ALREADY_EXISTS, "RegCreateKeyEx wrong error %u\n", err );
|
ok( err == ERROR_ALREADY_EXISTS, "RegCreateKeyEx wrong error %u\n", err );
|
||||||
|
|
||||||
err = RegDeleteKey( hkey_main, "target" );
|
err = RegDeleteKeyA( hkey_main, "target" );
|
||||||
ok( err == ERROR_SUCCESS, "RegDeleteKey failed error %u\n", err );
|
ok( err == ERROR_SUCCESS, "RegDeleteKey failed error %u\n", err );
|
||||||
|
|
||||||
err = RegDeleteKey( hkey_main, "link" );
|
err = RegDeleteKeyA( hkey_main, "link" );
|
||||||
ok( err == ERROR_FILE_NOT_FOUND, "RegDeleteKey wrong error %u\n", err );
|
ok( err == ERROR_FILE_NOT_FOUND, "RegDeleteKey wrong error %u\n", err );
|
||||||
|
|
||||||
status = pNtDeleteKey( link );
|
status = pNtDeleteKey( link );
|
||||||
|
@ -1867,8 +1867,9 @@ static void _check_key_value( int line, HANDLE root, const char *name, DWORD fla
|
||||||
static void test_redirection(void)
|
static void test_redirection(void)
|
||||||
{
|
{
|
||||||
DWORD err, type, dw, len;
|
DWORD err, type, dw, len;
|
||||||
HKEY key, root32, root64, key32, key64;
|
HKEY key, root32, root64, key32, key64, native, op_key;
|
||||||
BOOL is_vista = FALSE;
|
BOOL is_vista = FALSE;
|
||||||
|
REGSAM opposite = (sizeof(void*) == 8 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY);
|
||||||
|
|
||||||
if (ptr_size != 64)
|
if (ptr_size != 64)
|
||||||
{
|
{
|
||||||
|
@ -2102,6 +2103,39 @@ static void test_redirection(void)
|
||||||
RegCloseKey( key64 );
|
RegCloseKey( key64 );
|
||||||
RegCloseKey( root32 );
|
RegCloseKey( root32 );
|
||||||
RegCloseKey( root64 );
|
RegCloseKey( root64 );
|
||||||
|
|
||||||
|
/* open key in native bit mode */
|
||||||
|
err = RegOpenKeyExA(HKEY_CLASSES_ROOT, "Interface", 0, KEY_ALL_ACCESS, &native);
|
||||||
|
ok(err == ERROR_SUCCESS, "got %i\n", err);
|
||||||
|
|
||||||
|
pRegDeleteKeyExA(native, "AWineTest", 0, 0);
|
||||||
|
|
||||||
|
/* write subkey in opposite bit mode */
|
||||||
|
err = RegOpenKeyExA(HKEY_CLASSES_ROOT, "Interface", 0, KEY_ALL_ACCESS | opposite, &op_key);
|
||||||
|
ok(err == ERROR_SUCCESS, "got %i\n", err);
|
||||||
|
|
||||||
|
err = RegCreateKeyExA(op_key, "AWineTest", 0, NULL, 0, KEY_ALL_ACCESS | opposite,
|
||||||
|
NULL, &key, NULL);
|
||||||
|
ok(err == ERROR_SUCCESS || err == ERROR_ACCESS_DENIED, "got %i\n", err);
|
||||||
|
if(err != ERROR_SUCCESS){
|
||||||
|
win_skip("Can't write to registry\n");
|
||||||
|
RegCloseKey(op_key);
|
||||||
|
RegCloseKey(native);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
RegCloseKey(key);
|
||||||
|
|
||||||
|
/* verify subkey is not present in native mode */
|
||||||
|
err = RegOpenKeyExA(native, "AWineTest", 0, KEY_ALL_ACCESS, &key);
|
||||||
|
ok(err == ERROR_FILE_NOT_FOUND ||
|
||||||
|
broken(err == ERROR_SUCCESS), /* before Win7, HKCR is reflected instead of redirected */
|
||||||
|
"got %i\n", err);
|
||||||
|
|
||||||
|
err = pRegDeleteKeyExA(op_key, "AWineTest", opposite, 0);
|
||||||
|
ok(err == ERROR_SUCCESS, "got %i\n", err);
|
||||||
|
|
||||||
|
RegCloseKey(op_key);
|
||||||
|
RegCloseKey(native);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_classesroot(void)
|
static void test_classesroot(void)
|
||||||
|
@ -2133,7 +2167,6 @@ static void test_classesroot(void)
|
||||||
todo_wine ok(res == ERROR_SUCCESS ||
|
todo_wine ok(res == ERROR_SUCCESS ||
|
||||||
broken(res == ERROR_FILE_NOT_FOUND /* WinNT */),
|
broken(res == ERROR_FILE_NOT_FOUND /* WinNT */),
|
||||||
"test key not found in hkcr: %d\n", res);
|
"test key not found in hkcr: %d\n", res);
|
||||||
todo_wine ok(IS_HKCR(hkcr), "hkcr mask not set in %p\n", hkcr);
|
|
||||||
if (res)
|
if (res)
|
||||||
{
|
{
|
||||||
skip("HKCR key merging not supported\n");
|
skip("HKCR key merging not supported\n");
|
||||||
|
@ -2142,6 +2175,8 @@ static void test_classesroot(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
todo_wine ok(IS_HKCR(hkcr), "hkcr mask not set in %p\n", hkcr);
|
||||||
|
|
||||||
/* set a value in user's classes */
|
/* set a value in user's classes */
|
||||||
res = RegSetValueExA(hkey, "val1", 0, REG_SZ, (const BYTE *)"user", sizeof("user"));
|
res = RegSetValueExA(hkey, "val1", 0, REG_SZ, (const BYTE *)"user", sizeof("user"));
|
||||||
ok(res == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%x\n", res, GetLastError());
|
ok(res == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%x\n", res, GetLastError());
|
||||||
|
@ -2364,7 +2399,7 @@ static void test_classesroot(void)
|
||||||
RegCloseKey( hklmsub1 );
|
RegCloseKey( hklmsub1 );
|
||||||
|
|
||||||
/* delete subkey1 from hkcr (should point at user's classes) */
|
/* delete subkey1 from hkcr (should point at user's classes) */
|
||||||
res = RegDeleteKey(hkcr, "subkey1");
|
res = RegDeleteKeyA(hkcr, "subkey1");
|
||||||
ok(res == ERROR_SUCCESS, "RegDeleteKey failed: %d\n", res);
|
ok(res == ERROR_SUCCESS, "RegDeleteKey failed: %d\n", res);
|
||||||
|
|
||||||
/* confirm key was removed in hkey but not hklm */
|
/* confirm key was removed in hkey but not hklm */
|
||||||
|
@ -2375,7 +2410,7 @@ static void test_classesroot(void)
|
||||||
ok(!IS_HKCR(hklmsub1), "hkcr mask set in %p\n", hklmsub1);
|
ok(!IS_HKCR(hklmsub1), "hkcr mask set in %p\n", hklmsub1);
|
||||||
|
|
||||||
/* delete subkey1 from hkcr again (which should now point at hklm) */
|
/* delete subkey1 from hkcr again (which should now point at hklm) */
|
||||||
res = RegDeleteKey(hkcr, "subkey1");
|
res = RegDeleteKeyA(hkcr, "subkey1");
|
||||||
ok(res == ERROR_SUCCESS, "RegDeleteKey failed: %d\n", res);
|
ok(res == ERROR_SUCCESS, "RegDeleteKey failed: %d\n", res);
|
||||||
|
|
||||||
/* confirm hkey was removed in hklm */
|
/* confirm hkey was removed in hklm */
|
||||||
|
@ -2586,7 +2621,8 @@ static void test_classesroot_mask(void)
|
||||||
|
|
||||||
res = RegOpenKeyA( HKEY_CLASSES_ROOT, "CLSID", &hkey );
|
res = RegOpenKeyA( HKEY_CLASSES_ROOT, "CLSID", &hkey );
|
||||||
ok(res == ERROR_SUCCESS, "RegOpenKeyA failed: %d\n", res);
|
ok(res == ERROR_SUCCESS, "RegOpenKeyA failed: %d\n", res);
|
||||||
todo_wine ok(IS_HKCR(hkey), "hkcr mask not set in %p\n", hkey);
|
todo_wine ok(IS_HKCR(hkey) || broken(!IS_HKCR(hkey)) /* WinNT */,
|
||||||
|
"hkcr mask not set in %p\n", hkey);
|
||||||
RegCloseKey( hkey );
|
RegCloseKey( hkey );
|
||||||
|
|
||||||
res = RegOpenKeyA( HKEY_CURRENT_USER, "Software", &hkey );
|
res = RegOpenKeyA( HKEY_CURRENT_USER, "Software", &hkey );
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -104,7 +104,6 @@ static void test_open_scm(void)
|
||||||
CloseServiceHandle(scm_handle); /* Just in case */
|
CloseServiceHandle(scm_handle); /* Just in case */
|
||||||
|
|
||||||
/* Proper call with an empty hostname */
|
/* Proper call with an empty hostname */
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
scm_handle = OpenSCManagerA("", SERVICES_ACTIVE_DATABASEA, SC_MANAGER_CONNECT);
|
scm_handle = OpenSCManagerA("", SERVICES_ACTIVE_DATABASEA, SC_MANAGER_CONNECT);
|
||||||
ok(scm_handle != NULL, "Expected success, got error %u\n", GetLastError());
|
ok(scm_handle != NULL, "Expected success, got error %u\n", GetLastError());
|
||||||
CloseServiceHandle(scm_handle);
|
CloseServiceHandle(scm_handle);
|
||||||
|
@ -112,6 +111,8 @@ static void test_open_scm(void)
|
||||||
/* Again a correct one */
|
/* Again a correct one */
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT);
|
scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT);
|
||||||
|
ok(GetLastError() == ERROR_SUCCESS || broken(GetLastError() == ERROR_IO_PENDING) /* win2k */,
|
||||||
|
"Expected ERROR_SUCCESS, got %u\n", GetLastError());
|
||||||
ok(scm_handle != NULL, "Expected success, got error %u\n", GetLastError());
|
ok(scm_handle != NULL, "Expected success, got error %u\n", GetLastError());
|
||||||
CloseServiceHandle(scm_handle);
|
CloseServiceHandle(scm_handle);
|
||||||
}
|
}
|
||||||
|
@ -169,7 +170,7 @@ static void test_open_svc(void)
|
||||||
/* Try to open the service with this displayname, unless the displayname equals
|
/* Try to open the service with this displayname, unless the displayname equals
|
||||||
* the servicename as that would defeat the purpose of this test.
|
* the servicename as that would defeat the purpose of this test.
|
||||||
*/
|
*/
|
||||||
if (!lstrcmpi(spooler, displayname))
|
if (!lstrcmpiA(spooler, displayname))
|
||||||
{
|
{
|
||||||
skip("displayname equals servicename\n");
|
skip("displayname equals servicename\n");
|
||||||
CloseServiceHandle(scm_handle);
|
CloseServiceHandle(scm_handle);
|
||||||
|
@ -418,7 +419,7 @@ static void test_create_delete_svc(void)
|
||||||
|
|
||||||
/* Wait a while. One of the following tests also does a CreateService for the
|
/* Wait a while. One of the following tests also does a CreateService for the
|
||||||
* same servicename and this would result in an ERROR_SERVICE_MARKED_FOR_DELETE
|
* same servicename and this would result in an ERROR_SERVICE_MARKED_FOR_DELETE
|
||||||
* error if we do this to quick. Vista seems more picky then the others.
|
* error if we do this too quickly. Vista seems more picky than the others.
|
||||||
*/
|
*/
|
||||||
Sleep(1000);
|
Sleep(1000);
|
||||||
|
|
||||||
|
@ -704,7 +705,7 @@ static void test_get_displayname(void)
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = GetServiceDisplayNameA(scm_handle, servicename, displayname, &displaysize);
|
ret = GetServiceDisplayNameA(scm_handle, servicename, displayname, &displaysize);
|
||||||
ok(ret, "Expected success, got error %u\n", GetLastError());
|
ok(ret, "Expected success, got error %u\n", GetLastError());
|
||||||
ok(!lstrcmpi(displayname, servicename),
|
ok(!lstrcmpiA(displayname, servicename),
|
||||||
"Expected displayname to be %s, got %s\n", servicename, displayname);
|
"Expected displayname to be %s, got %s\n", servicename, displayname);
|
||||||
|
|
||||||
/* Delete the service */
|
/* Delete the service */
|
||||||
|
@ -872,7 +873,7 @@ static void test_get_servicekeyname(void)
|
||||||
{
|
{
|
||||||
ok(strlen(servicename) == tempsize/2,
|
ok(strlen(servicename) == tempsize/2,
|
||||||
"Expected the buffer to be twice the length of the string\n") ;
|
"Expected the buffer to be twice the length of the string\n") ;
|
||||||
ok(!lstrcmpi(servicename, spooler), "Expected %s, got %s\n", spooler, servicename);
|
ok(!lstrcmpiA(servicename, spooler), "Expected %s, got %s\n", spooler, servicename);
|
||||||
ok(servicesize == (tempsize * 2),
|
ok(servicesize == (tempsize * 2),
|
||||||
"Expected servicesize not to change if buffer not insufficient\n") ;
|
"Expected servicesize not to change if buffer not insufficient\n") ;
|
||||||
}
|
}
|
||||||
|
@ -1060,9 +1061,9 @@ static void test_enum_svc(void)
|
||||||
DWORD neededW, returnedW;
|
DWORD neededW, returnedW;
|
||||||
DWORD tempneeded, tempreturned, missing;
|
DWORD tempneeded, tempreturned, missing;
|
||||||
DWORD servicecountactive, servicecountinactive;
|
DWORD servicecountactive, servicecountinactive;
|
||||||
ENUM_SERVICE_STATUS *services;
|
ENUM_SERVICE_STATUSA *services;
|
||||||
ENUM_SERVICE_STATUSW *servicesW;
|
ENUM_SERVICE_STATUSW *servicesW;
|
||||||
ENUM_SERVICE_STATUS_PROCESS *exservices;
|
ENUM_SERVICE_STATUS_PROCESSA *exservices;
|
||||||
UINT i;
|
UINT i;
|
||||||
|
|
||||||
/* All NULL or wrong */
|
/* All NULL or wrong */
|
||||||
|
@ -1292,7 +1293,7 @@ static void test_enum_svc(void)
|
||||||
|
|
||||||
/* Allocate less than the needed bytes and don't specify a resume handle */
|
/* Allocate less than the needed bytes and don't specify a resume handle */
|
||||||
services = HeapAlloc(GetProcessHeap(), 0, tempneeded);
|
services = HeapAlloc(GetProcessHeap(), 0, tempneeded);
|
||||||
bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUS);
|
bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUSA);
|
||||||
needed = 0xdeadbeef;
|
needed = 0xdeadbeef;
|
||||||
returned = 0xdeadbeef;
|
returned = 0xdeadbeef;
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
|
@ -1305,7 +1306,7 @@ static void test_enum_svc(void)
|
||||||
"Expected ERROR_MORE_DATA, got %d\n", GetLastError());
|
"Expected ERROR_MORE_DATA, got %d\n", GetLastError());
|
||||||
|
|
||||||
/* Allocate less than the needed bytes, this time with a correct resume handle */
|
/* Allocate less than the needed bytes, this time with a correct resume handle */
|
||||||
bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUS);
|
bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUSA);
|
||||||
needed = 0xdeadbeef;
|
needed = 0xdeadbeef;
|
||||||
returned = 0xdeadbeef;
|
returned = 0xdeadbeef;
|
||||||
resume = 0;
|
resume = 0;
|
||||||
|
@ -1607,7 +1608,7 @@ static void test_enum_svc(void)
|
||||||
|
|
||||||
/* Allocate less than the needed bytes and don't specify a resume handle */
|
/* Allocate less than the needed bytes and don't specify a resume handle */
|
||||||
exservices = HeapAlloc(GetProcessHeap(), 0, tempneeded);
|
exservices = HeapAlloc(GetProcessHeap(), 0, tempneeded);
|
||||||
bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUS);
|
bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUSA);
|
||||||
needed = 0xdeadbeef;
|
needed = 0xdeadbeef;
|
||||||
returned = 0xdeadbeef;
|
returned = 0xdeadbeef;
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
|
@ -1620,7 +1621,7 @@ static void test_enum_svc(void)
|
||||||
"Expected ERROR_MORE_DATA, got %d\n", GetLastError());
|
"Expected ERROR_MORE_DATA, got %d\n", GetLastError());
|
||||||
|
|
||||||
/* Allocate less than the needed bytes, this time with a correct resume handle */
|
/* Allocate less than the needed bytes, this time with a correct resume handle */
|
||||||
bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUS);
|
bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUSA);
|
||||||
needed = 0xdeadbeef;
|
needed = 0xdeadbeef;
|
||||||
returned = 0xdeadbeef;
|
returned = 0xdeadbeef;
|
||||||
resume = 0;
|
resume = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue