ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
February 2009
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
29 participants
559 discussions
Start a n
N
ew thread
[dchapyshev] 39481: - Sync advapi32_winetest with Wine head
by dchapyshev@svn.reactos.org
Author: dchapyshev Date: Sun Feb 8 03:32:24 2009 New Revision: 39481 URL:
http://svn.reactos.org/svn/reactos?rev=39481&view=rev
Log: - Sync advapi32_winetest with Wine head Modified: trunk/rostests/winetests/advapi32/cred.c trunk/rostests/winetests/advapi32/crypt.c trunk/rostests/winetests/advapi32/crypt_lmhash.c trunk/rostests/winetests/advapi32/crypt_md4.c trunk/rostests/winetests/advapi32/crypt_md5.c trunk/rostests/winetests/advapi32/registry.c trunk/rostests/winetests/advapi32/security.c trunk/rostests/winetests/advapi32/service.c Modified: trunk/rostests/winetests/advapi32/cred.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/advapi32/cred.c…
============================================================================== --- trunk/rostests/winetests/advapi32/cred.c [iso-8859-1] (original) +++ trunk/rostests/winetests/advapi32/cred.c [iso-8859-1] Sun Feb 8 03:32:24 2009 @@ -34,6 +34,8 @@ static BOOL (WINAPI *pCredReadA)(LPCSTR,DWORD,DWORD,PCREDENTIALA *); static BOOL (WINAPI *pCredRenameA)(LPCSTR,LPCSTR,DWORD,DWORD); static BOOL (WINAPI *pCredWriteA)(PCREDENTIALA,DWORD); +static BOOL (WINAPI *pCredReadDomainCredentialsA)(PCREDENTIAL_TARGET_INFORMATIONA,DWORD,DWORD*,PCREDENTIALA**); + #define TEST_TARGET_NAME "
credtest.winehq.org
" #define TEST_TARGET_NAME2 "
credtest2.winehq.org
" @@ -133,6 +135,65 @@ ret = pCredDeleteA(TEST_TARGET_NAME, CRED_TYPE_GENERIC, 0xdeadbeef); ok(!ret && ( GetLastError() == ERROR_INVALID_FLAGS || GetLastError() == ERROR_INVALID_PARAMETER /* Vista */ ), "CredDeleteA should have failed with ERROR_INVALID_FLAGS or ERROR_INVALID_PARAMETER instead of %d\n", + GetLastError()); +} + +static void test_CredReadDomainCredentialsA(void) +{ + BOOL ret; + char target_name[] = "no_such_target"; + CREDENTIAL_TARGET_INFORMATIONA info = {target_name, NULL, target_name, NULL, NULL, NULL, NULL, 0, 0, NULL}; + DWORD count; + PCREDENTIAL* creds; + + if (!pCredReadDomainCredentialsA) + { + win_skip("CredReadDomainCredentialsA() is not implemented\n"); + return; + } + + /* these two tests would crash on both native and Wine. Implementations + * does not check for NULL output pointers and try to zero them out early */ +#if 0 + ok(!pCredReadDomainCredentialsA(&info, 0, NULL, &creds) && + GetLastError() == ERROR_INVALID_PARAMETER, "!\n"); + ok(!pCredReadDomainCredentialsA(&info, 0, &count, NULL) && + GetLastError() == ERROR_INVALID_PARAMETER, "!\n"); +#endif + + SetLastError(0xdeadbeef); + ret = pCredReadDomainCredentialsA(NULL, 0, &count, &creds); + ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, + "CredReadDomainCredentialsA should have failed with ERROR_INVALID_PARAMETER instead of %d\n", + GetLastError()); + + SetLastError(0xdeadbeef); + creds = (void*)0x12345; + count = 2; + ret = pCredReadDomainCredentialsA(&info, 0, &count, &creds); + ok(!ret && GetLastError() == ERROR_NOT_FOUND, + "CredReadDomainCredentialsA should have failed with ERROR_NOT_FOUND instead of %d\n", + GetLastError()); + ok(count ==0 && creds == NULL, "CredReadDomainCredentialsA must not return any result\n"); + + info.TargetName = NULL; + + SetLastError(0xdeadbeef); + ret = pCredReadDomainCredentialsA(&info, 0, &count, &creds); + ok(!ret, "CredReadDomainCredentialsA should have failed\n"); + ok(GetLastError() == ERROR_NOT_FOUND || + GetLastError() == ERROR_INVALID_PARAMETER, /* Vista, W2K8 */ + "Expected ERROR_NOT_FOUND or ERROR_INVALID_PARAMETER instead of %d\n", + GetLastError()); + + info.DnsServerName = NULL; + + SetLastError(0xdeadbeef); + ret = pCredReadDomainCredentialsA(&info, 0, &count, &creds); + ok(!ret, "CredReadDomainCredentialsA should have failed\n"); + ok(GetLastError() == ERROR_NOT_FOUND || + GetLastError() == ERROR_INVALID_PARAMETER, /* Vista, W2K8 */ + "Expected ERROR_NOT_FOUND or ERROR_INVALID_PARAMETER instead of %d\n", GetLastError()); } @@ -279,6 +340,7 @@ pCredDeleteA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredDeleteA"); pCredReadA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredReadA"); pCredRenameA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredRenameA"); + pCredReadDomainCredentialsA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredReadDomainCredentialsA"); if (!pCredEnumerateA || !pCredFree || !pCredWriteA || !pCredDeleteA || !pCredReadA) @@ -304,6 +366,8 @@ test_CredWriteA(); test_CredDeleteA(); + test_CredReadDomainCredentialsA(); + trace("generic:\n"); if (persists[CRED_TYPE_GENERIC] == CRED_PERSIST_NONE) skip("CRED_TYPE_GENERIC credentials are not supported or are disabled. Skipping\n"); Modified: trunk/rostests/winetests/advapi32/crypt.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/advapi32/crypt.…
============================================================================== --- trunk/rostests/winetests/advapi32/crypt.c [iso-8859-1] (original) +++ trunk/rostests/winetests/advapi32/crypt.c [iso-8859-1] Sun Feb 8 03:32:24 2009 @@ -461,8 +461,8 @@ RegQueryInfoKey(hKey, NULL, NULL, NULL, pdwProvCount, pcbProvName, NULL, NULL, NULL, NULL, NULL, NULL); (*pcbProvName)++; - - if (!(*pszProvName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, *pcbProvName)))) + + if (!(*pszProvName = LocalAlloc(LMEM_ZEROINIT, *pcbProvName))) return FALSE; RegEnumKeyEx(hKey, dwIndex, *pszProvName, pcbProvName, NULL, NULL, NULL, NULL); @@ -518,7 +518,7 @@ /* alloc provider to half the size required * cbName holds the size required */ providerLen = cbName / 2; - if (!(provider = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, providerLen)))) + if (!(provider = LocalAlloc(LMEM_ZEROINIT, providerLen))) return; result = pCryptEnumProvidersA(dwIndex, NULL, 0, &type, provider, &providerLen); @@ -546,7 +546,7 @@ /* check expected versus actual values returned */ result = pCryptEnumProvidersA(dwIndex, NULL, 0, &type, NULL, &providerLen); ok(result && providerLen==cbName, "expected %i, got %i\n", (int)cbName, (int)providerLen); - if (!(provider = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, providerLen)))) + if (!(provider = LocalAlloc(LMEM_ZEROINIT, providerLen))) return; providerLen = 0xdeadbeef; @@ -670,7 +670,7 @@ /* alloc provider type to half the size required * cbTypeName holds the size required */ typeNameSize = cbTypeName / 2; - if (!(typeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, typeNameSize)))) + if (!(typeName = LocalAlloc(LMEM_ZEROINIT, typeNameSize))) goto cleanup; SetLastError(0xdeadbeef); @@ -700,7 +700,7 @@ /* check expected versus actual values returned */ result = pCryptEnumProviderTypesA(index, NULL, 0, &provType, NULL, &typeNameSize); ok(result && typeNameSize==cbTypeName, "expected %d, got %d\n", cbTypeName, typeNameSize); - if (!(typeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, typeNameSize)))) + if (!(typeName = LocalAlloc(LMEM_ZEROINIT, typeNameSize))) goto cleanup; typeNameSize = 0xdeadbeef; @@ -870,12 +870,13 @@ /* remove the default provider and then set it to MS_DEF_PROV/PROV_RSA_FULL */ SetLastError(0xdeadbeef); result = pCryptSetProviderExA(MS_DEF_PROV, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT | CRYPT_DELETE_DEFAULT); - if (!result && (GetLastError() == ERROR_ACCESS_DENIED)) - { + if (!result) + { + ok( GetLastError() == ERROR_ACCESS_DENIED || broken(GetLastError() == ERROR_INVALID_PARAMETER), + "wrong error %u\n", GetLastError() ); skip("Not enough rights to remove the default provider\n"); return; } - ok(result, "%d\n", GetLastError()); result = pCryptSetProviderExA(MS_DEF_PROV, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT); ok(result, "%d\n", GetLastError()); Modified: trunk/rostests/winetests/advapi32/crypt_lmhash.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/advapi32/crypt_…
============================================================================== --- trunk/rostests/winetests/advapi32/crypt_lmhash.c [iso-8859-1] (original) +++ trunk/rostests/winetests/advapi32/crypt_lmhash.c [iso-8859-1] Sun Feb 8 03:32:24 2009 @@ -259,7 +259,7 @@ key.Length = 0x100; key.MaximumLength = 0x100; - r = pSystemFunction004(&in, &key, (struct ustring *)&out); + r = pSystemFunction004(&in, &key, &out); ok(r == STATUS_BUFFER_TOO_SMALL, "function failed\n"); in.Buffer = inbuf; Modified: trunk/rostests/winetests/advapi32/crypt_md4.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/advapi32/crypt_…
============================================================================== --- trunk/rostests/winetests/advapi32/crypt_md4.c [iso-8859-1] (original) +++ trunk/rostests/winetests/advapi32/crypt_md4.c [iso-8859-1] Sun Feb 8 03:32:24 2009 @@ -49,7 +49,7 @@ md4hashfunc pSystemFunction010; md4hashfunc pSystemFunction011; -#define ctxcmp( a, b ) memcmp( (char*)a, (char*)b, FIELD_OFFSET( MD4_CTX, in ) ) +#define ctxcmp( a, b ) memcmp( a, b, FIELD_OFFSET( MD4_CTX, in ) ) static void test_md4_ctx(void) { Modified: trunk/rostests/winetests/advapi32/crypt_md5.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/advapi32/crypt_…
============================================================================== --- trunk/rostests/winetests/advapi32/crypt_md5.c [iso-8859-1] (original) +++ trunk/rostests/winetests/advapi32/crypt_md5.c [iso-8859-1] Sun Feb 8 03:32:24 2009 @@ -41,7 +41,7 @@ fnMD5Update pMD5Update; fnMD5Final pMD5Final; -#define ctxcmp( a, b ) memcmp( (char*)a, (char*)b, FIELD_OFFSET( MD5_CTX, in ) ) +#define ctxcmp( a, b ) memcmp( a, b, FIELD_OFFSET( MD5_CTX, in ) ) static void test_md5_ctx(void) { Modified: trunk/rostests/winetests/advapi32/registry.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/advapi32/regist…
============================================================================== --- trunk/rostests/winetests/advapi32/registry.c [iso-8859-1] (original) +++ trunk/rostests/winetests/advapi32/registry.c [iso-8859-1] Sun Feb 8 03:32:24 2009 @@ -1475,6 +1475,52 @@ "Expected ERROR_FILE_NOT_FOUND, got %d\n", ret); } +static void test_rw_order(void) +{ + HKEY hKey; + DWORD dw = 0; + static char keyname[] = "test_rw_order"; + char value_buf[2]; + DWORD values, value_len, value_name_max_len; + LSTATUS ret; + + RegDeleteKeyA(HKEY_CURRENT_USER, keyname); + ret = RegCreateKeyA(HKEY_CURRENT_USER, keyname, &hKey); + if(ret != ERROR_SUCCESS) { + skip("Couldn't create key. Skipping.\n"); + return; + } + + ok(!RegSetValueExA(hKey, "A", 0, REG_DWORD, (LPBYTE)&dw, sizeof(dw)), + "RegSetValueExA for value \"A\" failed\n"); + ok(!RegSetValueExA(hKey, "C", 0, REG_DWORD, (LPBYTE)&dw, sizeof(dw)), + "RegSetValueExA for value \"C\" failed\n"); + ok(!RegSetValueExA(hKey, "D", 0, REG_DWORD, (LPBYTE)&dw, sizeof(dw)), + "RegSetValueExA for value \"D\" failed\n"); + ok(!RegSetValueExA(hKey, "B", 0, REG_DWORD, (LPBYTE)&dw, sizeof(dw)), + "RegSetValueExA for value \"B\" failed\n"); + + ok(!RegQueryInfoKeyA(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &values, + &value_name_max_len, NULL, NULL, NULL), "RegQueryInfoKeyA failed\n"); + ok(values == 4, "Expected 4 values, got %u\n", values); + + /* Value enumeration preserves RegSetValueEx call order */ + value_len = 2; + ok(!RegEnumValueA(hKey, 0, value_buf, &value_len, NULL, NULL, NULL, NULL), "RegEnumValueA failed\n"); + ok(strcmp(value_buf, "A") == 0, "Expected name \"A\", got %s\n", value_buf); + value_len = 2; + ok(!RegEnumValueA(hKey, 1, value_buf, &value_len, NULL, NULL, NULL, NULL), "RegEnumValueA failed\n"); + todo_wine ok(strcmp(value_buf, "C") == 0, "Expected name \"C\", got %s\n", value_buf); + value_len = 2; + ok(!RegEnumValueA(hKey, 2, value_buf, &value_len, NULL, NULL, NULL, NULL), "RegEnumValueA failed\n"); + todo_wine ok(strcmp(value_buf, "D") == 0, "Expected name \"D\", got %s\n", value_buf); + value_len = 2; + 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); + + ok(!RegDeleteKey(HKEY_CURRENT_USER, keyname), "Failed to delete key\n"); +} + START_TEST(registry) { /* Load pointers for functions that are not available in all Windows versions */ @@ -1506,6 +1552,7 @@ } test_reg_delete_tree(); + test_rw_order(); /* cleanup */ delete_key( hkey_main ); Modified: trunk/rostests/winetests/advapi32/security.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/advapi32/securi…
============================================================================== --- trunk/rostests/winetests/advapi32/security.c [iso-8859-1] (original) +++ trunk/rostests/winetests/advapi32/security.c [iso-8859-1] Sun Feb 8 03:32:24 2009 @@ -107,6 +107,8 @@ SECURITY_DESCRIPTOR_CONTROL); static DWORD (WINAPI *pGetSecurityInfo)(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); +static NTSTATUS (WINAPI *pNtAccessCheck)(PSECURITY_DESCRIPTOR, HANDLE, ACCESS_MASK, PGENERIC_MAPPING, + PPRIVILEGE_SET, PULONG, PULONG, NTSTATUS*); static HMODULE hmod; static int myARGC; @@ -142,6 +144,7 @@ hntdll = GetModuleHandleA("ntdll.dll"); pNtQueryObject = (void *)GetProcAddress( hntdll, "NtQueryObject" ); + pNtAccessCheck = (void *)GetProcAddress( hntdll, "NtAccessCheck" ); hmod = GetModuleHandle("advapi32.dll"); pAddAccessAllowedAceEx = (void *)GetProcAddress(hmod, "AddAccessAllowedAceEx"); @@ -240,7 +243,7 @@ GetLastError() ); ok(pConvertStringSidToSidA("S-1-5-21-93476-23408-4576", &psid), "ConvertStringSidToSidA failed\n"); - pisid = (SID *)psid; + pisid = psid; ok(pisid->SubAuthorityCount == 4, "Invalid sub authority count - expected 4, got %d\n", pisid->SubAuthorityCount); ok(pisid->SubAuthority[0] == 21, "Invalid subauthority 0 - expceted 21, got %d\n", pisid->SubAuthority[0]); ok(pisid->SubAuthority[3] == 4576, "Invalid subauthority 0 - expceted 4576, got %d\n", pisid->SubAuthority[3]); @@ -266,7 +269,7 @@ r = pConvertStringSidToSidA( refs[i].refStr, &psid ); ok( r, "failed to parse sid string\n" ); - pisid = (PISID)psid; + pisid = psid; ok( pisid && !memcmp( pisid->IdentifierAuthority.Value, refs[i].auth.Value, sizeof(refs[i].auth) ), @@ -373,7 +376,7 @@ "MultipleTrusteeOperation wrong\n"); ok( trustee.TrusteeForm == TRUSTEE_IS_SID, "TrusteeForm wrong\n"); ok( trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n"); - ok( trustee.ptstrName == (LPSTR) psid, "ptstrName wrong\n" ); + ok( trustee.ptstrName == psid, "ptstrName wrong\n" ); /* test BuildTrusteeWithObjectsAndSidA (test 1) */ memset( &trustee, 0xff, sizeof trustee ); @@ -842,6 +845,7 @@ HMODULE NtDllModule; BOOLEAN Enabled; DWORD err; + NTSTATUS ntret, ntAccessStatus; NtDllModule = GetModuleHandle("ntdll.dll"); if (!NtDllModule) @@ -917,6 +921,7 @@ /* Generic access mask */ SetLastError(0xdeadbeef); + Access = AccessStatus = 0xdeadbeef; ret = AccessCheck(SecurityDescriptor, Token, GENERIC_READ, &Mapping, PrivSet, &PrivSetLen, &Access, &AccessStatus); err = GetLastError(); @@ -925,7 +930,41 @@ ok(Access == 0xdeadbeef && AccessStatus == 0xdeadbeef, "Access and/or AccessStatus were changed!\n"); + /* Generic access mask - no privilegeset buffer */ + SetLastError(0xdeadbeef); + Access = AccessStatus = 0xdeadbeef; + ret = AccessCheck(SecurityDescriptor, Token, GENERIC_READ, &Mapping, + NULL, &PrivSetLen, &Access, &AccessStatus); + err = GetLastError(); + ok(!ret && err == ERROR_NOACCESS, "AccessCheck should have failed " + "with ERROR_NOACCESS, instead of %d\n", err); + ok(Access == 0xdeadbeef && AccessStatus == 0xdeadbeef, + "Access and/or AccessStatus were changed!\n"); + + /* Generic access mask - no returnlength */ + SetLastError(0xdeadbeef); + Access = AccessStatus = 0xdeadbeef; + ret = AccessCheck(SecurityDescriptor, Token, GENERIC_READ, &Mapping, + PrivSet, NULL, &Access, &AccessStatus); + err = GetLastError(); + ok(!ret && err == ERROR_NOACCESS, "AccessCheck should have failed " + "with ERROR_NOACCESS, instead of %d\n", err); + ok(Access == 0xdeadbeef && AccessStatus == 0xdeadbeef, + "Access and/or AccessStatus were changed!\n"); + + /* Generic access mask - no privilegeset buffer, no returnlength */ + SetLastError(0xdeadbeef); + Access = AccessStatus = 0xdeadbeef; + ret = AccessCheck(SecurityDescriptor, Token, GENERIC_READ, &Mapping, + NULL, NULL, &Access, &AccessStatus); + err = GetLastError(); + ok(!ret && err == ERROR_NOACCESS, "AccessCheck should have failed " + "with ERROR_NOACCESS, instead of %d\n", err); + ok(Access == 0xdeadbeef && AccessStatus == 0xdeadbeef, + "Access and/or AccessStatus were changed!\n"); + /* sd with no dacl present */ + Access = AccessStatus = 0xdeadbeef; ret = SetSecurityDescriptorDacl(SecurityDescriptor, FALSE, NULL, FALSE); ok(ret, "SetSecurityDescriptorDacl failed with error %d\n", GetLastError()); ret = AccessCheck(SecurityDescriptor, Token, KEY_READ, &Mapping, @@ -935,7 +974,63 @@ "AccessCheck failed to grant access with error %d\n", GetLastError()); + /* sd with no dacl present - no privilegeset buffer */ + SetLastError(0xdeadbeef); + Access = AccessStatus = 0xdeadbeef; + ret = AccessCheck(SecurityDescriptor, Token, GENERIC_READ, &Mapping, + NULL, &PrivSetLen, &Access, &AccessStatus); + err = GetLastError(); + ok(!ret && err == ERROR_NOACCESS, "AccessCheck should have failed " + "with ERROR_NOACCESS, instead of %d\n", err); + ok(Access == 0xdeadbeef && AccessStatus == 0xdeadbeef, + "Access and/or AccessStatus were changed!\n"); + + if(pNtAccessCheck) + { + /* Generic access mask - no privilegeset buffer */ + SetLastError(0xdeadbeef); + Access = ntAccessStatus = 0xdeadbeef; + ntret = pNtAccessCheck(SecurityDescriptor, Token, GENERIC_READ, &Mapping, + NULL, &PrivSetLen, &Access, &ntAccessStatus); + err = GetLastError(); + ok(ntret == STATUS_ACCESS_VIOLATION, + "NtAccessCheck should have failed with STATUS_ACCESS_VIOLATION, got %x\n", ntret); + ok(err == 0xdeadbeef, + "NtAccessCheck shouldn't set last error, got %d\n", err); + ok(Access == 0xdeadbeef && ntAccessStatus == 0xdeadbeef, + "Access and/or AccessStatus were changed!\n"); + + /* Generic access mask - no returnlength */ + SetLastError(0xdeadbeef); + Access = ntAccessStatus = 0xdeadbeef; + ntret = pNtAccessCheck(SecurityDescriptor, Token, GENERIC_READ, &Mapping, + PrivSet, NULL, &Access, &ntAccessStatus); + err = GetLastError(); + ok(ntret == STATUS_ACCESS_VIOLATION, + "NtAccessCheck should have failed with STATUS_ACCESS_VIOLATION, got %x\n", ntret); + ok(err == 0xdeadbeef, + "NtAccessCheck shouldn't set last error, got %d\n", err); + ok(Access == 0xdeadbeef && ntAccessStatus == 0xdeadbeef, + "Access and/or AccessStatus were changed!\n"); + + /* Generic access mask - no privilegeset buffer, no returnlength */ + SetLastError(0xdeadbeef); + Access = ntAccessStatus = 0xdeadbeef; + ntret = pNtAccessCheck(SecurityDescriptor, Token, GENERIC_READ, &Mapping, + NULL, NULL, &Access, &ntAccessStatus); + err = GetLastError(); + ok(ntret == STATUS_ACCESS_VIOLATION, + "NtAccessCheck should have failed with STATUS_ACCESS_VIOLATION, got %x\n", ntret); + ok(err == 0xdeadbeef, + "NtAccessCheck shouldn't set last error, got %d\n", err); + ok(Access == 0xdeadbeef && ntAccessStatus == 0xdeadbeef, + "Access and/or AccessStatus were changed!\n"); + } + else + win_skip("NtAccessCheck unavailable. Skipping.\n"); + /* sd with NULL dacl */ + Access = AccessStatus = 0xdeadbeef; ret = SetSecurityDescriptorDacl(SecurityDescriptor, TRUE, NULL, FALSE); ok(ret, "SetSecurityDescriptorDacl failed with error %d\n", GetLastError()); ret = AccessCheck(SecurityDescriptor, Token, KEY_READ, &Mapping, @@ -963,6 +1058,7 @@ ok(res, "AddAccessDeniedAce failed with error %d\n", GetLastError()); /* sd with dacl */ + Access = AccessStatus = 0xdeadbeef; ret = AccessCheck(SecurityDescriptor, Token, KEY_READ, &Mapping, PrivSet, &PrivSetLen, &Access, &AccessStatus); ok(ret, "AccessCheck failed with error %d\n", GetLastError()); @@ -980,6 +1076,7 @@ /* Access denied by SD */ SetLastError(0xdeadbeef); + Access = AccessStatus = 0xdeadbeef; ret = AccessCheck(SecurityDescriptor, Token, KEY_WRITE, &Mapping, PrivSet, &PrivSetLen, &Access, &AccessStatus); ok(ret, "AccessCheck failed with error %d\n", GetLastError()); @@ -1254,7 +1351,7 @@ /* 74 */ {TRUE, "S-1-5-22"}, {FALSE, "S-1-5-21-12-23-34-45-56-521"}, {TRUE, "S-1-5-32-573"} }; -static void test_CreateWellKnownSid() +static void test_CreateWellKnownSid(void) { SID_IDENTIFIER_AUTHORITY ident = { SECURITY_NT_AUTHORITY }; PSID domainsid; @@ -1608,6 +1705,7 @@ DWORD sid_size, domain_size, user_size; DWORD sid_save, domain_save; CHAR user_name[UNLEN + 1]; + CHAR computer_name[UNLEN + 1]; SID_NAME_USE sid_use; LPSTR domain, account, sid_dom; PSID psid; @@ -1728,7 +1826,9 @@ sid_use = 0xcafebabe; SetLastError(0xdeadbeef); ret = LookupAccountNameA(NULL, NULL, NULL, &sid_size, NULL, &domain_size, &sid_use); - if (!ret && GetLastError() != ERROR_NONE_MAPPED) + if (!ret && GetLastError() == ERROR_NONE_MAPPED) + win_skip("NULL account name doesn't work on NT4\n"); + else { ok(!ret, "Expected 0, got %d\n", ret); ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, @@ -1753,8 +1853,6 @@ HeapFree(GetProcessHeap(), 0, psid); HeapFree(GetProcessHeap(), 0, domain); } - else - win_skip("NULL account name doesn't work on NT4\n"); /* try an invalid account name */ SetLastError(0xdeadbeef); @@ -1778,6 +1876,27 @@ "Expected RPC_S_SERVER_UNAVAILABLE or RPC_S_INVALID_NET_ADDR, got %d\n", GetLastError()); ok(sid_size == 0, "Expected 0, got %d\n", sid_size); ok(domain_size == 0, "Expected 0, got %d\n", domain_size); + + /* try with the computer name as the account name */ + domain_size = sizeof(computer_name); + GetComputerNameA(computer_name, &domain_size); + sid_size = 0; + domain_size = 0; + ret = LookupAccountNameA(NULL, computer_name, NULL, &sid_size, NULL, &domain_size, &sid_use); + ok(!ret && (GetLastError() == ERROR_INSUFFICIENT_BUFFER || + broken(GetLastError() == ERROR_TRUSTED_DOMAIN_FAILURE) || + broken(GetLastError() == ERROR_TRUSTED_RELATIONSHIP_FAILURE)), + "LookupAccountNameA failed: %d\n", GetLastError()); + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + psid = HeapAlloc(GetProcessHeap(), 0, sid_size); + domain = HeapAlloc(GetProcessHeap(), 0, domain_size); + ret = LookupAccountNameA(NULL, computer_name, psid, &sid_size, domain, &domain_size, &sid_use); + ok(ret, "LookupAccountNameA failed: %d\n", GetLastError()); + ok(sid_use == SidTypeDomain, "expected SidTypeDomain, got %d\n", sid_use); + HeapFree(GetProcessHeap(), 0, domain); + HeapFree(GetProcessHeap(), 0, psid); + } } static void test_security_descriptor(void) @@ -1870,7 +1989,8 @@ static void test_process_security(void) { BOOL res; - char owner[32], group[32]; + PTOKEN_OWNER owner; + PTOKEN_PRIMARY_GROUP group; PSID AdminSid = NULL, UsersSid = NULL; PACL Acl = NULL; SECURITY_DESCRIPTOR *SecurityDescriptor = NULL; @@ -1879,7 +1999,7 @@ STARTUPINFOA startup; SECURITY_ATTRIBUTES psa; HANDLE token, event; - DWORD tmp; + DWORD size; Acl = HeapAlloc(GetProcessHeap(), 0, 256); res = InitializeAcl(Acl, 256, ACL_REVISION); @@ -1900,16 +2020,31 @@ return; } - res = GetTokenInformation( token, TokenOwner, owner, sizeof(owner), &tmp ); + res = GetTokenInformation( token, TokenOwner, NULL, 0, &size ); + ok(!res, "Expected failure, got %d\n", res); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, + "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); + + owner = HeapAlloc(GetProcessHeap(), 0, size); + res = GetTokenInformation( token, TokenOwner, owner, size, &size ); ok(res, "GetTokenInformation failed with error %d\n", GetLastError()); AdminSid = ((TOKEN_OWNER*)owner)->Owner; - res = GetTokenInformation( token, TokenPrimaryGroup, group, sizeof(group), &tmp ); + + res = GetTokenInformation( token, TokenPrimaryGroup, NULL, 0, &size ); + ok(!res, "Expected failure, got %d\n", res); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, + "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); + + group = HeapAlloc(GetProcessHeap(), 0, size); + res = GetTokenInformation( token, TokenPrimaryGroup, group, size, &size ); ok(res, "GetTokenInformation failed with error %d\n", GetLastError()); UsersSid = ((TOKEN_PRIMARY_GROUP*)group)->PrimaryGroup; CloseHandle( token ); if (!res) { + HeapFree(GetProcessHeap(), 0, group); + HeapFree(GetProcessHeap(), 0, owner); HeapFree(GetProcessHeap(), 0, Acl); return; } @@ -1969,6 +2104,8 @@ CloseHandle( info.hProcess ); CloseHandle( info.hThread ); CloseHandle( event ); + HeapFree(GetProcessHeap(), 0, group); + HeapFree(GetProcessHeap(), 0, owner); HeapFree(GetProcessHeap(), 0, Acl); HeapFree(GetProcessHeap(), 0, SecurityDescriptor); } @@ -2197,7 +2334,7 @@ ExplicitAccess.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE; ExplicitAccess.Trustee.TrusteeForm = TRUSTEE_IS_SID; ExplicitAccess.Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN; - ExplicitAccess.Trustee.ptstrName = (LPWSTR)EveryoneSid; + ExplicitAccess.Trustee.ptstrName = EveryoneSid; res = pSetEntriesInAclW(1, &ExplicitAccess, OldAcl, &NewAcl); ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res); ok(NewAcl != NULL, "returned acl was NULL\n"); @@ -2245,7 +2382,7 @@ ExplicitAccess.grfAccessMode = REVOKE_ACCESS; ExplicitAccess.Trustee.TrusteeForm = TRUSTEE_IS_SID; - ExplicitAccess.Trustee.ptstrName = (LPWSTR)UsersSid; + ExplicitAccess.Trustee.ptstrName = UsersSid; res = pSetEntriesInAclW(1, &ExplicitAccess, OldAcl, &NewAcl); ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res); ok(NewAcl != NULL, "returned acl was NULL\n"); @@ -2291,7 +2428,8 @@ ret = GetSecurityDescriptorControl(pSecDesc, &control, &revision); ok(ret, "GetSecurityDescriptorControl failed with error %d\n", GetLastError()); - ok((control & (SE_SELF_RELATIVE|SE_DACL_PRESENT)) == (SE_SELF_RELATIVE|SE_DACL_PRESENT), + ok((control & (SE_SELF_RELATIVE|SE_DACL_PRESENT)) == (SE_SELF_RELATIVE|SE_DACL_PRESENT) || + broken((control & (SE_SELF_RELATIVE|SE_DACL_PRESENT)) == SE_DACL_PRESENT), /* NT4 */ "control (0x%x) doesn't have (SE_SELF_RELATIVE|SE_DACL_PRESENT) flags set\n", control); ok(revision == SECURITY_DESCRIPTOR_REVISION1, "revision was %d instead of 1\n", revision); ret = GetSecurityDescriptorOwner(pSecDesc, &owner, &owner_defaulted); @@ -2300,6 +2438,7 @@ ret = GetSecurityDescriptorGroup(pSecDesc, &group, &group_defaulted); ok(ret, "GetSecurityDescriptorGroup failed with error %d\n", GetLastError()); ok(group != NULL, "group should not be NULL\n"); + LocalFree(pSecDesc); } static void test_ConvertStringSecurityDescriptor(void) @@ -2447,7 +2586,7 @@ "Expected ERROR_INVALID_ACL or ERROR_INVALID_SID, got %d\n", GetLastError()); } -static void test_ConvertSecurityDescriptorToString() +static void test_ConvertSecurityDescriptorToString(void) { SECURITY_DESCRIPTOR desc; SECURITY_INFORMATION sec_info = OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION|SACL_SECURITY_INFORMATION; @@ -2488,17 +2627,17 @@ size = 4096; pCreateWellKnownSid(WinLocalSid, NULL, sid_buf, &size); - SetSecurityDescriptorOwner(&desc, (PSID)sid_buf, FALSE); + SetSecurityDescriptorOwner(&desc, sid_buf, FALSE); ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); CHECK_RESULT_AND_FREE("O:S-1-2-0"); - SetSecurityDescriptorOwner(&desc, (PSID)sid_buf, TRUE); + SetSecurityDescriptorOwner(&desc, sid_buf, TRUE); ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); CHECK_RESULT_AND_FREE("O:S-1-2-0"); size = sizeof(sid_buf); pCreateWellKnownSid(WinLocalSystemSid, NULL, sid_buf, &size); - SetSecurityDescriptorOwner(&desc, (PSID)sid_buf, TRUE); + SetSecurityDescriptorOwner(&desc, sid_buf, TRUE); ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); CHECK_RESULT_AND_FREE("O:SY"); @@ -2676,6 +2815,7 @@ "(D;OICI;0xffffffff;;;S-1-5-21-93476-23408-4576)" "S:(AU;OICINPIOIDSAFA;CCDCLCSWRPRC;;;SU)(AU;NPSA;0x12019f;;;SU)", SDDL_REVISION_1, &sec, &dwDescSize), "Creating descriptor failed\n"); // FIXME: ConvertStringSecurityDescriptorToSecurityDescriptor fails and 'sec' isn't set + test_SetSecurityDescriptorControl(sec); Modified: trunk/rostests/winetests/advapi32/service.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/advapi32/servic…
============================================================================== --- trunk/rostests/winetests/advapi32/service.c [iso-8859-1] (original) +++ trunk/rostests/winetests/advapi32/service.c [iso-8859-1] Sun Feb 8 03:32:24 2009 @@ -60,11 +60,7 @@ /* No access rights */ SetLastError(0xdeadbeef); scm_handle = OpenSCManagerA(NULL, NULL, 0); - ok(scm_handle != NULL, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == 0xdeadbeef /* NT4, XP */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); + ok(scm_handle != NULL, "Expected success, got error %u\n", GetLastError()); CloseServiceHandle(scm_handle); /* Unknown database name */ @@ -84,31 +80,24 @@ /* Remote unknown host */ SetLastError(0xdeadbeef); scm_handle = OpenSCManagerA("DOESNOTEXIST", SERVICES_ACTIVE_DATABASEA, SC_MANAGER_CONNECT); + todo_wine + { ok(!scm_handle, "Expected failure\n"); - todo_wine ok(GetLastError() == RPC_S_SERVER_UNAVAILABLE || GetLastError() == RPC_S_INVALID_NET_ADDR /* w2k8 */, "Expected RPC_S_SERVER_UNAVAILABLE or RPC_S_INVALID_NET_ADDR, got %d\n", GetLastError()); + } CloseServiceHandle(scm_handle); /* Just in case */ /* Proper call with an empty hostname */ SetLastError(0xdeadbeef); scm_handle = OpenSCManagerA("", SERVICES_ACTIVE_DATABASEA, SC_MANAGER_CONNECT); - ok(scm_handle != NULL, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == ERROR_ENVVAR_NOT_FOUND /* NT4 */ || - GetLastError() == 0xdeadbeef /* XP */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING, ERROR_ENVVAR_NOT_FOUND or 0xdeadbeef, got %d\n", GetLastError()); + ok(scm_handle != NULL, "Expected success, got error %u\n", GetLastError()); CloseServiceHandle(scm_handle); /* Again a correct one */ SetLastError(0xdeadbeef); scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - ok(scm_handle != NULL, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == 0xdeadbeef /* NT4, XP */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); + ok(scm_handle != NULL, "Expected success, got error %u\n", GetLastError()); CloseServiceHandle(scm_handle); } @@ -151,11 +140,7 @@ skip("Not enough rights to get a handle to the service\n"); else { - ok(svc_handle != NULL, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* XP, NT4 */, - "Expected ERROR_SUCCESS or 0xdeadbeef, got %d\n", GetLastError()); + ok(svc_handle != NULL, "Expected success, got error %u\n", GetLastError()); CloseServiceHandle(svc_handle); } @@ -386,10 +371,6 @@ svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, 0, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); ok(svc_handle1 != NULL, "Could not create the service : %d\n", GetLastError()); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == 0xdeadbeef /* NT4, XP */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); /* DeleteService however must have proper rights */ SetLastError(0xdeadbeef); @@ -407,14 +388,9 @@ /* Now that we have the proper rights, we should be able to delete */ SetLastError(0xdeadbeef); ret = DeleteService(svc_handle1); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); + ok(ret, "Expected success, got error %u\n", GetLastError()); CloseServiceHandle(svc_handle1); - CloseServiceHandle(scm_handle); /* Wait a while. One of the following tests also does a CreateService for the @@ -440,6 +416,8 @@ DWORD displaysize, tempsize, tempsizeW; static const CHAR deadbeef[] = "Deadbeef"; static const WCHAR spoolerW[] = {'S','p','o','o','l','e','r',0}; + static const WCHAR deadbeefW[] = {'D','e','a','d','b','e','e','f',0}; + static const WCHAR abcW[] = {'A','B','C',0}; static const CHAR servicename[] = "Winetest"; static const CHAR pathname[] = "we_dont_care.exe"; @@ -476,6 +454,85 @@ ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + SetLastError(0xdeadbeef); + ret = GetServiceDisplayNameA(scm_handle, deadbeef, NULL, &displaysize); + ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + todo_wine ok(displaysize == 1, "Service size expected 1, got %d\n", displaysize); + + displaysize = 15; + strcpy(displayname, "ABC"); + ret = GetServiceDisplayNameA(scm_handle, deadbeef, displayname, &displaysize); + ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + todo_wine ok(displaysize == 15, "Service size expected 15, got %d\n", displaysize); + ok(displayname[0] == 0, "Service name not empty\n"); + + displaysize = 15; + lstrcpyW( displaynameW, abcW ); + ret = GetServiceDisplayNameW(scm_handle, deadbeefW, displaynameW, &displaysize); + ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + ok(displaysize == 15, "Service size expected 15, got %d\n", displaysize); + ok(displaynameW[0] == 0, "Service name not empty\n"); + + displaysize = 0; + strcpy(displayname, "ABC"); + ret = GetServiceDisplayNameA(scm_handle, deadbeef, displayname, &displaysize); + ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + todo_wine ok(displaysize == 1, "Service size expected 1, got %d\n", displaysize); + ok(displayname[0] == 'A', "Service name changed\n"); + + displaysize = 0; + lstrcpyW( displaynameW, abcW ); + ret = GetServiceDisplayNameW(scm_handle, deadbeefW, displaynameW, &displaysize); + ok(!ret, "Expected failure\n"); + ok(displaysize == 2, "Service size expected 2, got %d\n", displaysize); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + ok(displaynameW[0] == 'A', "Service name changed\n"); + + displaysize = 1; + strcpy(displayname, "ABC"); + ret = GetServiceDisplayNameA(scm_handle, deadbeef, displayname, &displaysize); + ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + todo_wine ok(displaysize == 1, "Service size expected 1, got %d\n", displaysize); + ok(displayname[0] == 0, "Service name not empty\n"); + + displaysize = 1; + lstrcpyW( displaynameW, abcW ); + ret = GetServiceDisplayNameW(scm_handle, deadbeefW, displaynameW, &displaysize); + ok(!ret, "Expected failure\n"); + ok(displaysize == 2, "Service size expected 2, got %d\n", displaysize); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + ok(displaynameW[0] == 'A', "Service name changed\n"); + + displaysize = 2; + strcpy(displayname, "ABC"); + ret = GetServiceDisplayNameA(scm_handle, deadbeef, displayname, &displaysize); + ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + todo_wine ok(displaysize == 2, "Service size expected 2, got %d\n", displaysize); + ok(displayname[0] == 0, "Service name not empty\n"); + + displaysize = 2; + lstrcpyW( displaynameW, abcW ); + ret = GetServiceDisplayNameW(scm_handle, deadbeefW, displaynameW, &displaysize); + ok(!ret, "Expected failure\n"); + ok(displaysize == 2, "Service size expected 2, got %d\n", displaysize); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + ok(displaynameW[0] == 0, "Service name not empty\n"); + /* Check if 'Spooler' exists */ svc_handle = OpenServiceA(scm_handle, spooler, GENERIC_READ); if (!svc_handle) @@ -518,33 +575,21 @@ SetLastError(0xdeadbeef); displaysize = (tempsize / 2) + 1; ret = GetServiceDisplayNameA(scm_handle, spooler, displayname, &displaysize); - ok(ret, "Expected success\n"); + ok(ret, "Expected success, got error %u\n", GetLastError()); ok(displaysize == ((tempsize / 2) + 1), "Expected no change for the needed buffer size\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); /* Now with the original returned size */ SetLastError(0xdeadbeef); displaysize = tempsize; ret = GetServiceDisplayNameA(scm_handle, spooler, displayname, &displaysize); - ok(ret, "Expected success\n"); + ok(ret, "Expected success, got error %u\n", GetLastError()); ok(displaysize == tempsize, "Expected no change for the needed buffer size\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); /* And with a bigger than needed buffer */ SetLastError(0xdeadbeef); displaysize = tempsize * 2; ret = GetServiceDisplayNameA(scm_handle, spooler, displayname, &displaysize); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); + ok(ret, "Expected success, got error %u\n", GetLastError()); /* Test that shows that if the buffersize is enough, it's not changed */ ok(displaysize == tempsize * 2, "Expected no change for the needed buffer size\n"); ok(lstrlen(displayname) == tempsize/2, @@ -581,11 +626,7 @@ SetLastError(0xdeadbeef); displaysize = tempsizeW + 1; /* This caters for the null terminating character */ ret = GetServiceDisplayNameW(scm_handle, spoolerW, displaynameW, &displaysize); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); + ok(ret, "Expected success, got error %u\n", GetLastError()); ok(displaysize == tempsizeW, "Expected the needed buffersize\n"); ok(lstrlenW(displaynameW) == displaysize, "Expected the buffer to be the length of the string\n") ; @@ -639,13 +680,9 @@ /* Get the displayname */ SetLastError(0xdeadbeef); ret = GetServiceDisplayNameA(scm_handle, servicename, displayname, &displaysize); - ok(ret, "Expected success\n"); + ok(ret, "Expected success, got error %u\n", GetLastError()); ok(!lstrcmpi(displayname, servicename), "Expected displayname to be %s, got %s\n", servicename, displayname); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); /* Delete the service */ ret = DeleteService(svc_handle); @@ -669,6 +706,7 @@ BOOL ret; static const CHAR deadbeef[] = "Deadbeef"; static const WCHAR deadbeefW[] = {'D','e','a','d','b','e','e','f',0}; + static const WCHAR abcW[] = {'A','B','C',0}; /* Having NULL for the size of the buffer will crash on W2K3 */ @@ -711,29 +749,73 @@ strcpy(servicename, "ABC"); ret = GetServiceKeyNameA(scm_handle, deadbeef, servicename, &servicesize); ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); todo_wine ok(servicesize == 15, "Service size expected 15, got %d\n", servicesize); ok(servicename[0] == 0, "Service name not empty\n"); servicesize = 15; - servicenameW[0] = 'A'; + lstrcpyW( servicenameW, abcW ); ret = GetServiceKeyNameW(scm_handle, deadbeefW, servicenameW, &servicesize); ok(!ret, "Expected failure\n"); - todo_wine ok(servicesize == 15, "Service size expected 15, got %d\n", servicesize); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + ok(servicesize == 15, "Service size expected 15, got %d\n", servicesize); ok(servicenameW[0] == 0, "Service name not empty\n"); servicesize = 0; strcpy(servicename, "ABC"); ret = GetServiceKeyNameA(scm_handle, deadbeef, servicename, &servicesize); ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); todo_wine ok(servicesize == 1, "Service size expected 1, got %d\n", servicesize); ok(servicename[0] == 'A', "Service name changed\n"); servicesize = 0; - servicenameW[0] = 'A'; + lstrcpyW( servicenameW, abcW ); ret = GetServiceKeyNameW(scm_handle, deadbeefW, servicenameW, &servicesize); ok(!ret, "Expected failure\n"); + ok(servicesize == 2, "Service size expected 2, got %d\n", servicesize); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + ok(servicenameW[0] == 'A', "Service name changed\n"); + + servicesize = 1; + strcpy(servicename, "ABC"); + ret = GetServiceKeyNameA(scm_handle, deadbeef, servicename, &servicesize); + ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + todo_wine ok(servicesize == 1, "Service size expected 1, got %d\n", servicesize); + ok(servicename[0] == 0, "Service name not empty\n"); + + servicesize = 1; + lstrcpyW( servicenameW, abcW ); + ret = GetServiceKeyNameW(scm_handle, deadbeefW, servicenameW, &servicesize); + ok(!ret, "Expected failure\n"); + ok(servicesize == 2, "Service size expected 2, got %d\n", servicesize); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + ok(servicenameW[0] == 'A', "Service name changed\n"); + + servicesize = 2; + strcpy(servicename, "ABC"); + ret = GetServiceKeyNameA(scm_handle, deadbeef, servicename, &servicesize); + ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); todo_wine ok(servicesize == 2, "Service size expected 2, got %d\n", servicesize); - ok(servicenameW[0] == 'A', "Service name changed\n"); + ok(servicename[0] == 0, "Service name not empty\n"); + + servicesize = 2; + lstrcpyW( servicenameW, abcW ); + ret = GetServiceKeyNameW(scm_handle, deadbeefW, servicenameW, &servicesize); + ok(!ret, "Expected failure\n"); + ok(servicesize == 2, "Service size expected 2, got %d\n", servicesize); + ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, + "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); + ok(servicenameW[0] == 0, "Service name not empty\n"); /* Check if 'Spooler' exists */ svc_handle = OpenServiceA(scm_handle, spooler, GENERIC_READ); @@ -762,11 +844,7 @@ tempsize = servicesize; servicesize *= 2; ret = GetServiceKeyNameA(scm_handle, displayname, servicename, &servicesize); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); + ok(ret, "Expected success, got error %u\n", GetLastError()); if (ret) { ok(lstrlen(servicename) == tempsize/2, @@ -780,11 +858,7 @@ SetLastError(0xdeadbeef); servicesize *= 2; ret = GetServiceKeyNameW(scm_handle, displaynameW, servicenameW, &servicesize); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); + ok(ret, "Expected success, got error %u\n", GetLastError()); if (ret) { ok(lstrlen(servicename) == tempsize/2, @@ -854,11 +928,7 @@ SetLastError(0xdeadbeef); ret = QueryServiceStatus(svc_handle, &status); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); + ok(ret, "Expected success, got error %u\n", GetLastError()); CloseServiceHandle(svc_handle); @@ -937,11 +1007,7 @@ bufsize = sizeof(SERVICE_STATUS_PROCESS); SetLastError(0xdeadbeef); ret = pQueryServiceStatusEx(svc_handle, 0, (BYTE*)statusproc, bufsize, &needed); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); + ok(ret, "Expected success, got error %u\n", GetLastError()); if (statusproc->dwCurrentState == SERVICE_RUNNING) ok(statusproc->dwProcessId != 0, "Expect a process id for this running service\n"); @@ -959,7 +1025,7 @@ SC_HANDLE scm_handle; BOOL ret; DWORD bufsize, needed, returned, resume; - DWORD tempneeded, tempreturned; + DWORD tempneeded, tempreturned, missing; DWORD servicecountactive, servicecountinactive; ENUM_SERVICE_STATUS *services; ENUM_SERVICE_STATUS_PROCESS *exservices; @@ -1001,7 +1067,8 @@ SetLastError(0xdeadbeef); ret = EnumServicesStatusA(scm_handle, 0, 0, NULL, 0, &needed, NULL, NULL); ok(!ret, "Expected failure\n"); - ok(needed == 0xdeadbeef, "Expected no change to the needed buffer variable\n"); + ok(needed == 0xdeadbeef || broken(needed != 0xdeadbeef), /* nt4 */ + "Expected no change to the needed buffer variable\n"); todo_wine ok(GetLastError() == ERROR_INVALID_ADDRESS || GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, @@ -1015,7 +1082,8 @@ ok(!ret, "Expected failure\n"); todo_wine { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(returned == 0, "Expected number of services to be set to 0, got %d\n", returned); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); @@ -1029,7 +1097,8 @@ ok(!ret, "Expected failure\n"); todo_wine { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(returned == 0, "Expected number of services to be set to 0, got %d\n", returned); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); @@ -1044,7 +1113,8 @@ ok(!ret, "Expected failure\n"); todo_wine { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(returned == 0, "Expected number of services to be set to 0, got %d\n", returned); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); @@ -1059,7 +1129,8 @@ ok(!ret, "Expected failure\n"); todo_wine { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(returned == 0, "Expected number of services to be set to 0, got %d\n", returned); } ok(GetLastError() == ERROR_ACCESS_DENIED, @@ -1097,13 +1168,9 @@ services, bufsize, &needed, &returned, NULL); todo_wine { - ok(ret, "Expected success\n"); + ok(ret, "Expected success, got error %u\n", GetLastError()); ok(needed == 0, "Expected needed buffer to be 0 as we are done\n"); ok(returned != 0xdeadbeef && returned > 0, "Expected some returned services\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); } HeapFree(GetProcessHeap(), 0, services); @@ -1111,8 +1178,8 @@ tempreturned = returned; /* Allocate less than the needed bytes and don't specify a resume handle */ - services = HeapAlloc(GetProcessHeap(), 0, tempneeded - 1); - bufsize = tempneeded - 1; + services = HeapAlloc(GetProcessHeap(), 0, tempneeded); + bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUS); needed = 0xdeadbeef; returned = 0xdeadbeef; SetLastError(0xdeadbeef); @@ -1122,15 +1189,13 @@ todo_wine { ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size for this one service\n"); - ok(returned == (tempreturned - 1), "Expected one service less to be returned\n"); + ok(returned < tempreturned, "Expected fewer services to be returned\n"); ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); } - HeapFree(GetProcessHeap(), 0, services); /* Allocate less than the needed bytes, this time with a correct resume handle */ - services = HeapAlloc(GetProcessHeap(), 0, tempneeded - 1); - bufsize = tempneeded - 1; + bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUS); needed = 0xdeadbeef; returned = 0xdeadbeef; resume = 0; @@ -1141,15 +1206,14 @@ todo_wine { ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size for this one service\n"); - ok(returned == (tempreturned - 1), "Expected one service less to be returned\n"); + ok(returned < tempreturned, "Expected fewer services to be returned\n"); ok(resume, "Expected a resume handle\n"); ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); } - HeapFree(GetProcessHeap(), 0, services); - - /* Fetch that last service but pass a bigger buffer size */ - services = HeapAlloc(GetProcessHeap(), 0, tempneeded); + + /* Fetch the missing services but pass a bigger buffer size */ + missing = tempreturned - returned; bufsize = tempneeded; needed = 0xdeadbeef; returned = 0xdeadbeef; @@ -1158,13 +1222,9 @@ services, bufsize, &needed, &returned, &resume); todo_wine { - ok(ret, "Expected success\n"); + ok(ret, "Expected success, got error %u\n", GetLastError()); ok(needed == 0, "Expected needed buffer to be 0 as we are done\n"); - ok(returned == 1, "Expected only 1 service to be returned\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); + ok(returned == missing, "Expected %u services to be returned\n", missing); } ok(resume == 0, "Expected the resume handle to be 0\n"); HeapFree(GetProcessHeap(), 0, services); @@ -1249,8 +1309,8 @@ todo_wine { - ok(servicecountactive == 0, "Active services mismatch\n"); - ok(servicecountinactive == 0, "Inactive services mismatch\n"); + ok(servicecountactive == 0, "Active services mismatch %u\n", servicecountactive); + ok(servicecountinactive == 0, "Inactive services mismatch %u\n", servicecountinactive); } CloseServiceHandle(scm_handle); @@ -1290,7 +1350,8 @@ SetLastError(0xdeadbeef); ret = pEnumServicesStatusExA(scm_handle, 0, 0, 0, NULL, 0, &needed, NULL, NULL, NULL); ok(!ret, "Expected failure\n"); - ok(needed == 0xdeadbeef, "Expected no change to the needed buffer variable\n"); + ok(needed == 0xdeadbeef || broken(needed != 0xdeadbeef), /* nt4 */ + "Expected no change to the needed buffer variable\n"); todo_wine ok(GetLastError() == ERROR_INVALID_ADDRESS || GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, @@ -1318,7 +1379,8 @@ ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); todo_wine { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); } @@ -1333,7 +1395,8 @@ ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); todo_wine { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); } @@ -1348,7 +1411,8 @@ ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); todo_wine { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); } @@ -1363,7 +1427,8 @@ ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); todo_wine { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); } @@ -1376,7 +1441,8 @@ NULL, 0, &needed, &returned, NULL, NULL); ok(!ret, "Expected failure\n"); todo_wine - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); ok(GetLastError() == ERROR_ACCESS_DENIED, "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); @@ -1391,7 +1457,8 @@ NULL, 0, &needed, &returned, NULL, "deadbeef_group"); ok(!ret, "Expected failure\n"); todo_wine - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); + ok(needed == 0 || broken(needed != 0), /* nt4 */ + "Expected needed buffer size to be set to 0, got %d\n", needed); ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); ok(GetLastError() == ERROR_ACCESS_DENIED, "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); @@ -1447,13 +1514,9 @@ (BYTE*)exservices, bufsize, &needed, &returned, NULL, NULL); todo_wine { - ok(ret, "Expected success\n"); + ok(ret, "Expected success, got error %u\n", GetLastError()); ok(needed == 0, "Expected needed buffer to be 0 as we are done\n"); ok(returned == tempreturned, "Expected the same number of service from this function\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); } HeapFree(GetProcessHeap(), 0, exservices); @@ -1461,8 +1524,8 @@ tempreturned = returned; /* Allocate less than the needed bytes and don't specify a resume handle */ - exservices = HeapAlloc(GetProcessHeap(), 0, tempneeded - 1); - bufsize = tempneeded - 1; + exservices = HeapAlloc(GetProcessHeap(), 0, tempneeded); + bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUS); needed = 0xdeadbeef; returned = 0xdeadbeef; SetLastError(0xdeadbeef); @@ -1472,15 +1535,13 @@ todo_wine { ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size\n"); - ok(returned == (tempreturned - 1), "Expected one service less to be returned\n"); + ok(returned < tempreturned, "Expected fewer services to be returned\n"); ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); } - HeapFree(GetProcessHeap(), 0, exservices); /* Allocate less than the needed bytes, this time with a correct resume handle */ - exservices = HeapAlloc(GetProcessHeap(), 0, tempneeded - 1); - bufsize = tempneeded - 1; + bufsize = (tempreturned - 1) * sizeof(ENUM_SERVICE_STATUS); needed = 0xdeadbeef; returned = 0xdeadbeef; resume = 0; @@ -1491,15 +1552,14 @@ todo_wine { ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size\n"); - ok(returned == (tempreturned - 1), "Expected one service less to be returned\n"); + ok(returned < tempreturned, "Expected fewer services to be returned\n"); ok(resume, "Expected a resume handle\n"); ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); } - HeapFree(GetProcessHeap(), 0, exservices); /* Fetch that last service but pass a bigger buffer size */ - exservices = HeapAlloc(GetProcessHeap(), 0, tempneeded); + missing = tempreturned - returned; bufsize = tempneeded; needed = 0xdeadbeef; returned = 0xdeadbeef; @@ -1508,14 +1568,10 @@ (BYTE*)exservices, bufsize, &needed, &returned, &resume, NULL); todo_wine { - ok(ret, "Expected success\n"); + ok(ret, "Expected success, got error %u\n", GetLastError()); ok(needed == 0, "Expected needed buffer to be 0 as we are done\n"); - ok(returned == 1, "Expected only 1 service to be returned\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); - } + } + ok(returned == missing, "Expected %u services to be returned\n", missing); ok(resume == 0, "Expected the resume handle to be 0\n"); HeapFree(GetProcessHeap(), 0, exservices); @@ -1594,7 +1650,8 @@ else { /* We shouldn't have a process id for inactive services */ - ok(status.dwProcessId == 0, "This service shouldn't have an associated process id\n"); + ok(status.dwProcessId == 0, "Service %s state %u shouldn't have an associated process id\n", + exservices[i].lpServiceName, status.dwCurrentState); servicecountinactive--; } @@ -1602,8 +1659,8 @@ } HeapFree(GetProcessHeap(), 0, exservices); - ok(servicecountactive == 0, "Active services mismatch\n"); - ok(servicecountinactive == 0, "Inactive services mismatch\n"); + ok(servicecountactive == 0, "Active services mismatch %u\n", servicecountactive); + ok(servicecountinactive == 0, "Inactive services mismatch %u\n", servicecountinactive); CloseServiceHandle(scm_handle); } @@ -1625,11 +1682,7 @@ handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); SetLastError(0xdeadbeef); ret = CloseServiceHandle(handle); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); + ok(ret, "Expected success got error %u\n", GetLastError()); } static void test_sequence(void) @@ -1708,11 +1761,7 @@ given = needed; SetLastError(0xdeadbeef); ret = QueryServiceConfigA(svc_handle, config, given, &needed); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */|| - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); + ok(ret, "Expected success, got error %u\n", GetLastError()); todo_wine { ok(given == needed, "Expected the given (%d) and needed (%d) buffersizes to be equal\n", given, needed); @@ -1754,12 +1803,7 @@ SetLastError(0xdeadbeef); ret = DeleteService(svc_handle); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */|| - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - + ok(ret, "Expected success, got error %u\n", GetLastError()); CloseServiceHandle(svc_handle); /* Wait a while. The following test does a CreateService again */ @@ -1973,15 +2017,15 @@ svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(svc_handle1 != NULL, "Expected success\n"); + ok(svc_handle1 != NULL, "Expected success, got error %u\n", GetLastError()); /* Get a handle to this new service */ svc_handle2 = OpenServiceA(scm_handle, servicename, GENERIC_READ); - ok(svc_handle2 != NULL, "Expected success\n"); + ok(svc_handle2 != NULL, "Expected success, got error %u\n", GetLastError()); /* Get another handle to this new service */ svc_handle3 = OpenServiceA(scm_handle, servicename, GENERIC_READ); - ok(svc_handle3 != NULL, "Expected success\n"); + ok(svc_handle3 != NULL, "Expected success, got error %u\n", GetLastError()); /* Check if we can close the handle to the Service Control Manager */ ret = CloseServiceHandle(scm_handle); @@ -1989,11 +2033,11 @@ /* Get a new handle to the Service Control Manager */ scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - ok(scm_handle != NULL, "Expected success\n"); + ok(scm_handle != NULL, "Expected success, got error %u\n", GetLastError()); /* Get a handle to this new service */ svc_handle4 = OpenServiceA(scm_handle, servicename, GENERIC_ALL); - ok(svc_handle4 != NULL, "Expected success\n"); + ok(svc_handle4 != NULL, "Expected success, got error %u\n", GetLastError()); /* Delete the service */ ret = DeleteService(svc_handle4); @@ -2040,7 +2084,7 @@ svc_handle5 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(svc_handle5 != NULL, "Expected success\n"); + ok(svc_handle5 != NULL, "Expected success, got error %u\n", GetLastError()); /* Delete the service */ ret = DeleteService(svc_handle5);
15 years, 10 months
1
0
0
0
[gschneider] 39480: - Convert coordinates of src and dst rectangle in TransparentBlt - Use a descriptive debug print when creation of a XLateObj failed
by gschneider@svn.reactos.org
Author: gschneider Date: Sun Feb 8 03:25:28 2009 New Revision: 39480 URL:
http://svn.reactos.org/svn/reactos?rev=39480&view=rev
Log: - Convert coordinates of src and dst rectangle in TransparentBlt - Use a descriptive debug print when creation of a XLateObj failed Modified: trunk/reactos/subsystems/win32/win32k/objects/bitblt.c Modified: trunk/reactos/subsystems/win32/win32k/objects/bitblt.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
============================================================================== --- trunk/reactos/subsystems/win32/win32k/objects/bitblt.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/objects/bitblt.c [iso-8859-1] Sun Feb 8 03:25:28 2009 @@ -144,7 +144,7 @@ if (XlateObj == (XLATEOBJ*)-1) { - DPRINT1("error!!!\n"); + DPRINT1("couldn't create XlateObj\n"); SetLastWin32Error(ERROR_NO_SYSTEM_RESOURCES); XlateObj = NULL; Status = FALSE; @@ -299,7 +299,7 @@ if (XlateObj == (XLATEOBJ*)-1) { - DPRINT1("error!\n"); + DPRINT1("couldn't create XlateObj\n"); SetLastWin32Error(ERROR_NO_SYSTEM_RESOURCES); XlateObj = NULL; goto cleanup; @@ -458,10 +458,13 @@ rcDest.top = yDst; rcDest.right = rcDest.left + cxDst; rcDest.bottom = rcDest.top + cyDst; + IntLPtoDP(DCDest, (LPPOINT)&rcDest, 2); + rcSrc.left = xSrc; rcSrc.top = ySrc; rcSrc.right = rcSrc.left + cxSrc; rcSrc.bottom = rcSrc.top + cySrc; + IntLPtoDP(DCSrc, (LPPOINT)&rcSrc, 2); if((cxDst != cxSrc) || (cyDst != cySrc)) {
15 years, 10 months
1
0
0
0
[mjmartin] 39479: - Set Buffer pointer to NULL on failure.
by mjmartin@svn.reactos.org
Author: mjmartin Date: Sun Feb 8 03:20:11 2009 New Revision: 39479 URL:
http://svn.reactos.org/svn/reactos?rev=39479&view=rev
Log: - Set Buffer pointer to NULL on failure. Modified: trunk/reactos/drivers/filesystems/npfs/create.c Modified: trunk/reactos/drivers/filesystems/npfs/create.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/c…
============================================================================== --- trunk/reactos/drivers/filesystems/npfs/create.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/npfs/create.c [iso-8859-1] Sun Feb 8 03:20:11 2009 @@ -253,7 +253,10 @@ /* Not found, bail out with error for FILE_OPEN requests. */ DPRINT("No listening server CCB found!\n"); if (ClientCcb->Data) + { ExFreePool(ClientCcb->Data); + ClientCcb->Data = NULL; + } KeUnlockMutex(&Fcb->CcbListLock); Irp->IoStatus.Status = STATUS_OBJECT_PATH_NOT_FOUND; IoCompleteRequest(Irp, IO_NO_INCREMENT);
15 years, 10 months
1
0
0
0
[cwittich] 39478: remove hack
by cwittich@svn.reactos.org
Author: cwittich Date: Sun Feb 8 03:09:04 2009 New Revision: 39478 URL:
http://svn.reactos.org/svn/reactos?rev=39478&view=rev
Log: remove hack Modified: trunk/reactos/dll/win32/mstask/mstask.rbuild trunk/reactos/lib/sdk/uuid/uuid.c Modified: trunk/reactos/dll/win32/mstask/mstask.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mstask/mstask.rb…
============================================================================== --- trunk/reactos/dll/win32/mstask/mstask.rbuild [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mstask/mstask.rbuild [iso-8859-1] Sun Feb 8 03:09:04 2009 @@ -14,12 +14,15 @@ <file>task.c</file> <file>task_scheduler.c</file> <file>task_trigger.c</file> - <file>mstask_local.idl</file> <file>rsrc.rc</file> + <library>mstask_local_interface</library> <library>wine</library> <library>uuid</library> <library>ole32</library> <library>kernel32</library> <library>ntdll</library> </module> +<module name="mstask_local_interface" type="idlinterface"> + <file>mstask_local.idl</file> +</module> </group> Modified: trunk/reactos/lib/sdk/uuid/uuid.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/uuid/uuid.c?rev=39…
============================================================================== --- trunk/reactos/lib/sdk/uuid/uuid.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/uuid/uuid.c [iso-8859-1] Sun Feb 8 03:09:04 2009 @@ -75,7 +75,6 @@ #include "dimm.h" #include "isguids.h" #include "objsafe.h" -#include "mstask.h" /* FIXME: cguids declares GUIDs but does not define their values */
15 years, 10 months
1
0
0
0
[mjmartin] 39477: - Fix formatting
by mjmartin@svn.reactos.org
Author: mjmartin Date: Sun Feb 8 03:04:42 2009 New Revision: 39477 URL:
http://svn.reactos.org/svn/reactos?rev=39477&view=rev
Log: - Fix formatting Modified: trunk/reactos/drivers/filesystems/npfs/create.c trunk/reactos/drivers/filesystems/npfs/finfo.c trunk/reactos/drivers/filesystems/npfs/fsctrl.c trunk/reactos/drivers/filesystems/npfs/npfs.c trunk/reactos/drivers/filesystems/npfs/npfs.h trunk/reactos/drivers/filesystems/npfs/rw.c trunk/reactos/drivers/filesystems/npfs/volume.c [This mail would be too long, it was shortened to contain the URLs only.] Modified: trunk/reactos/drivers/filesystems/npfs/create.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/c…
Modified: trunk/reactos/drivers/filesystems/npfs/finfo.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/f…
Modified: trunk/reactos/drivers/filesystems/npfs/fsctrl.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/f…
Modified: trunk/reactos/drivers/filesystems/npfs/npfs.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/n…
Modified: trunk/reactos/drivers/filesystems/npfs/npfs.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/n…
Modified: trunk/reactos/drivers/filesystems/npfs/rw.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/r…
Modified: trunk/reactos/drivers/filesystems/npfs/volume.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/v…
15 years, 10 months
1
0
0
0
[cwittich] 39476: remove hack
by cwittich@svn.reactos.org
Author: cwittich Date: Sun Feb 8 03:01:01 2009 New Revision: 39476 URL:
http://svn.reactos.org/svn/reactos?rev=39476&view=rev
Log: remove hack Removed: trunk/reactos/dll/win32/qmgr/bits.idl_i.c Modified: trunk/reactos/dll/win32/qmgr/qmgr.rbuild Removed: trunk/reactos/dll/win32/qmgr/bits.idl_i.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/qmgr/bits.idl_i.…
============================================================================== --- trunk/reactos/dll/win32/qmgr/bits.idl_i.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/qmgr/bits.idl_i.c (removed) @@ -1,26 +1,0 @@ -/*** Autogenerated by WIDL 0.4-SVN from f:\reactos\include\psdk\bits.idl - Do not edit ***/ - -#include <rpc.h> -#include <rpcndr.h> - -#include <initguid.h> - -#ifdef __cplusplus -extern "C" { -#endif - -DEFINE_GUID(IID_IBackgroundCopyFile, 0x01b7bd23, 0xfb88, 0x4a77, 0x84,0x90, 0x58,0x91,0xd3,0xe4,0x65,0x3a); -DEFINE_GUID(IID_IEnumBackgroundCopyFiles, 0xca51e165, 0xc365, 0x424c, 0x8d,0x41, 0x24,0xaa,0xa4,0xff,0x3c,0x40); -DEFINE_GUID(IID_IBackgroundCopyError, 0x19c613a0, 0xfcb8, 0x4f28, 0x81,0xae, 0x89,0x7c,0x3d,0x07,0x8f,0x81); -DEFINE_GUID(IID_IBackgroundCopyJob, 0x37668d37, 0x507e, 0x4160, 0x93,0x16, 0x26,0x30,0x6d,0x15,0x0b,0x12); -DEFINE_GUID(IID_IEnumBackgroundCopyJobs, 0x1af4f612, 0x3b71, 0x466f, 0x8f,0x58, 0x7b,0x6f,0x73,0xac,0x57,0xad); -DEFINE_GUID(IID_IBackgroundCopyCallback, 0x97ea99c7, 0x0186, 0x4ad4, 0x8d,0xf9, 0xc5,0xb4,0xe0,0xed,0x6b,0x22); -DEFINE_GUID(IID_IBackgroundCopyManager, 0x5ce34c0d, 0x0dc9, 0x4c1f, 0x89,0x7c, 0xda,0xa1,0xb7,0x8c,0xee,0x7c); -DEFINE_GUID(LIBID_BackgroundCopyManager, 0x1deeb74f, 0x7915, 0x4560, 0xb5,0x58, 0x91,0x8c,0x83,0xf1,0x76,0xa6); -DEFINE_GUID(CLSID_BackgroundCopyManager, 0x4991d34b, 0x80a1, 0x4291, 0x83,0xb6, 0x33,0x28,0x36,0x6b,0x90,0x97); -DEFINE_GUID(IID_IBackgroundCopyJob2, 0x54b50739, 0x686f, 0x45eb, 0x9d,0xff, 0xd6,0xa9,0xa0,0xfa,0xa9,0xaf); - -#ifdef __cplusplus -} -#endif - Modified: trunk/reactos/dll/win32/qmgr/qmgr.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/qmgr/qmgr.rbuild…
============================================================================== --- trunk/reactos/dll/win32/qmgr/qmgr.rbuild [iso-8859-1] (original) +++ trunk/reactos/dll/win32/qmgr/qmgr.rbuild [iso-8859-1] Sun Feb 8 03:01:01 2009 @@ -15,6 +15,7 @@ <library>advapi32</library> <library>kernel32</library> <library>ntdll</library> + <library>qmgr_local_interface</library> <file>enum_files.c</file> <file>enum_jobs.c</file> <file>factory.c</file> @@ -23,13 +24,12 @@ <file>qmgr.c</file> <file>qmgr_main.c</file> <file>service.c</file> - - <!-- FIXME: this file should be autogenerated with WIDL --> - <file>bits.idl_i.c</file> - <file>rsrc.rc</file> </module> <module name="qmgr_local_header" type="idlheader"> <file>qmgr_local.idl</file> </module> +<module name="qmgr_local_interface" type="idlinterface"> + <file>qmgr_local.idl</file> +</module> </group>
15 years, 10 months
1
0
0
0
[cwittich] 39475: remove hack
by cwittich@svn.reactos.org
Author: cwittich Date: Sun Feb 8 02:58:54 2009 New Revision: 39475 URL:
http://svn.reactos.org/svn/reactos?rev=39475&view=rev
Log: remove hack Removed: trunk/reactos/dll/win32/msi/msiserver.idl_i.c Modified: trunk/reactos/dll/win32/msi/msi.rbuild Modified: trunk/reactos/dll/win32/msi/msi.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi.rbuild?r…
============================================================================== --- trunk/reactos/dll/win32/msi/msi.rbuild [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msi.rbuild [iso-8859-1] Sun Feb 8 02:58:54 2009 @@ -53,10 +53,6 @@ <file>upgrade.c</file> <file>where.c</file> <file>msi.rc</file> - - <!-- FIXME: this file should be autogenerated with WIDL --> - <file>msiserver.idl_i.c</file> - <include base="msi" root="intermediate">.</include> <library>wine</library> <library>uuid</library> @@ -76,6 +72,7 @@ <library>odbccp32</library> <library>ntdll</library> <library>pseh</library> + <library>msiserver_interface</library> <dependency>msiserver</dependency> <dependency>msiheader</dependency> </module> @@ -85,4 +82,7 @@ <module name="msiheader" type="idlheader"> <file>msiserver.idl</file> </module> +<module name="msiserver_interface" type="idlinterface"> + <file>msiserver.idl</file> +</module> </group> Removed: trunk/reactos/dll/win32/msi/msiserver.idl_i.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msiserver.id…
============================================================================== --- trunk/reactos/dll/win32/msi/msiserver.idl_i.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msiserver.idl_i.c (removed) @@ -1,32 +1,0 @@ -/*** Autogenerated by WIDL 0.4-SVN from msiserver.idl - Do not edit ***/ - -#include <rpc.h> -#include <rpcndr.h> - -#include <initguid.h> - -#ifdef __cplusplus -extern "C" { -#endif - -DEFINE_GUID(IID_IWineMsiRemoteDatabase, 0x7bde2046, 0xd03b, 0x4ffc, 0xb8,0x4c, 0xa0,0x98,0xf3,0x8c,0xff,0x0b); -DEFINE_GUID(IID_IWineMsiRemotePackage, 0x902b3592, 0x9d08, 0x4dfd, 0xa5,0x93, 0xd0,0x7c,0x52,0x54,0x64,0x21); -DEFINE_GUID(IID_IWineMsiRemoteCustomAction, 0x56d58b64, 0x8780, 0x4c22, 0xa8,0xbc, 0x8b,0x0b,0x29,0xe4,0xa9,0xf8); -DEFINE_GUID(LIBID_WindowsInstaller, 0x000c1092, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_Installer, 0x000c1090, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_Record, 0x000c1093, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_StringList, 0x000c1095, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_RecordList, 0x000c1096, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_UIPreview, 0x000c109a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_SummaryInfo, 0x000c109b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_View, 0x000c109c, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_Database, 0x000c109d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_Session, 0x000c109e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_FeatureInfo, 0x000c109f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_Product, 0x000c10a0, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(DIID_Patch, 0x000c10a1, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); - -#ifdef __cplusplus -} -#endif -
15 years, 10 months
1
0
0
0
[cwittich] 39474: sync ole32_winetest with wine 1.14
by cwittich@svn.reactos.org
Author: cwittich Date: Sun Feb 8 02:56:01 2009 New Revision: 39474 URL:
http://svn.reactos.org/svn/reactos?rev=39474&view=rev
Log: sync ole32_winetest with wine 1.14 Modified: trunk/rostests/winetests/ole32/clipboard.c trunk/rostests/winetests/ole32/compobj.c trunk/rostests/winetests/ole32/marshal.c trunk/rostests/winetests/ole32/moniker.c trunk/rostests/winetests/ole32/ole2.c trunk/rostests/winetests/ole32/stg_prop.c trunk/rostests/winetests/ole32/usrmarshal.c Modified: trunk/rostests/winetests/ole32/clipboard.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/clipboard…
============================================================================== --- trunk/rostests/winetests/ole32/clipboard.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/clipboard.c [iso-8859-1] Sun Feb 8 02:56:01 2009 @@ -68,7 +68,7 @@ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IEnumFORMATETC)) { IEnumFORMATETC_AddRef(iface); - *ppvObj = (LPVOID)This; + *ppvObj = This; return S_OK; } *ppvObj = NULL; @@ -165,7 +165,7 @@ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDataObject)) { IDataObject_AddRef(iface); - *ppvObj = (LPVOID)This; + *ppvObj = This; return S_OK; } *ppvObj = NULL; Modified: trunk/rostests/winetests/ole32/compobj.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/compobj.c…
============================================================================== --- trunk/rostests/winetests/ole32/compobj.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/compobj.c [iso-8859-1] Sun Feb 8 02:56:01 2009 @@ -37,6 +37,7 @@ /* functions that are not present on all versions of Windows */ HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit); HRESULT (WINAPI * pCoGetObjectContext)(REFIID riid, LPVOID *ppv); +HRESULT (WINAPI * pCoSwitchCallContext)(IUnknown *pObject, IUnknown **ppOldObject); #define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) #define ok_more_than_one_lock() ok(cLocks > 0, "Number of locks should be > 0, but actually is %d\n", cLocks) @@ -88,7 +89,7 @@ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IClassFactory)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IClassFactory_AddRef(iface); return S_OK; } @@ -286,7 +287,7 @@ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IClassFactory)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IMessageFilter_AddRef(iface); return S_OK; } @@ -397,7 +398,7 @@ if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IWineTest)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IUnknown_AddRef(iface); return S_OK; } @@ -512,7 +513,7 @@ hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); ok_ole_success(hr, "CreateStreamOnHGlobal"); - hr = CoMarshalInterface(stream, &IID_IWineTest, (IUnknown *)&Test_Unknown, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); + hr = CoMarshalInterface(stream, &IID_IWineTest, &Test_Unknown, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); ok(hr == E_NOTIMPL, "CoMarshalInterface should have returned E_NOTIMPL instead of 0x%08x\n", hr); IStream_Release(stream); @@ -938,6 +939,7 @@ if (hr == REGDB_E_CLASSNOTREG) { trace("IE not installed so can't run CoFreeUnusedLibraries test\n"); + CoUninitialize(); return; } ok_ole_success(hr, "CoCreateInstance"); @@ -1039,6 +1041,106 @@ CoUninitialize(); } +typedef struct { + const IUnknownVtbl *lpVtbl; + LONG refs; +} Test_CallContext; + +static HRESULT WINAPI Test_CallContext_QueryInterface( + IUnknown *iface, + REFIID riid, + LPVOID *ppvObj) +{ + if (ppvObj == NULL) return E_POINTER; + + if (IsEqualGUID(riid, &IID_IUnknown)) + { + *ppvObj = iface; + IUnknown_AddRef(iface); + return S_OK; + } + + *ppvObj = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI Test_CallContext_AddRef(IUnknown *iface) +{ + Test_CallContext *This = (Test_CallContext*)iface; + return InterlockedIncrement(&This->refs); +} + +static ULONG WINAPI Test_CallContext_Release(IUnknown *iface) +{ + Test_CallContext *This = (Test_CallContext*)iface; + ULONG refs = InterlockedDecrement(&This->refs); + if (!refs) + HeapFree(GetProcessHeap(), 0, This); + return refs; +} + +static const IUnknownVtbl TestCallContext_Vtbl = +{ + Test_CallContext_QueryInterface, + Test_CallContext_AddRef, + Test_CallContext_Release +}; + +static void test_CoGetCallContext(void) +{ + HRESULT hr; + ULONG refs; + IUnknown *pUnk; + IUnknown *test_object; + + if (!pCoSwitchCallContext) + { + skip("CoSwitchCallContext not present\n"); + return; + } + + CoInitialize(NULL); + + test_object = HeapAlloc(GetProcessHeap(), 0, sizeof(Test_CallContext)); + ((Test_CallContext*)test_object)->lpVtbl = &TestCallContext_Vtbl; + ((Test_CallContext*)test_object)->refs = 1; + + hr = CoGetCallContext(&IID_IUnknown, (void**)&pUnk); + ok(hr == RPC_E_CALL_COMPLETE, "Expected RPC_E_CALL_COMPLETE, got 0x%08x\n", hr); + + pUnk = (IUnknown*)0xdeadbeef; + hr = pCoSwitchCallContext(test_object, &pUnk); + ok_ole_success(hr, "CoSwitchCallContext"); + ok(pUnk == NULL, "expected NULL, got %p\n", pUnk); + refs = IUnknown_AddRef(test_object); + ok(refs == 2, "Expected refcount 2, got %d\n", refs); + IUnknown_Release(test_object); + + pUnk = (IUnknown*)0xdeadbeef; + hr = CoGetCallContext(&IID_IUnknown, (void**)&pUnk); + ok_ole_success(hr, "CoGetCallContext"); + ok(pUnk == test_object, "expected %p, got %p\n", test_object, pUnk); + refs = IUnknown_AddRef(test_object); + ok(refs == 3, "Expected refcount 3, got %d\n", refs); + IUnknown_Release(test_object); + IUnknown_Release(pUnk); + + pUnk = (IUnknown*)0xdeadbeef; + hr = pCoSwitchCallContext(NULL, &pUnk); + ok_ole_success(hr, "CoSwitchCallContext"); + ok(pUnk == test_object, "expected %p, got %p\n", test_object, pUnk); + refs = IUnknown_AddRef(test_object); + ok(refs == 2, "Expected refcount 2, got %d\n", refs); + IUnknown_Release(test_object); + + hr = CoGetCallContext(&IID_IUnknown, (void**)&pUnk); + ok(hr == RPC_E_CALL_COMPLETE, "Expected RPC_E_CALL_COMPLETE, got 0x%08x\n", hr); + + IUnknown_Release(test_object); + + CoUninitialize(); +} + static void test_CoInitializeEx(void) { HRESULT hr; @@ -1064,6 +1166,7 @@ { HMODULE hOle32 = GetModuleHandle("ole32"); pCoGetObjectContext = (void*)GetProcAddress(hOle32, "CoGetObjectContext"); + pCoSwitchCallContext = (void*)GetProcAddress(hOle32, "CoSwitchCallContext"); if (!(pCoInitializeEx = (void*)GetProcAddress(hOle32, "CoInitializeEx"))) { trace("You need DCOM95 installed to run this test\n"); @@ -1088,5 +1191,6 @@ test_registered_object_thread_affinity(); test_CoFreeUnusedLibraries(); test_CoGetObjectContext(); + test_CoGetCallContext(); test_CoInitializeEx(); } Modified: trunk/rostests/winetests/ole32/marshal.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/marshal.c…
============================================================================== --- trunk/rostests/winetests/ole32/marshal.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/marshal.c [iso-8859-1] Sun Feb 8 02:56:01 2009 @@ -114,7 +114,7 @@ if (IsEqualGUID(riid, &IID_IUnknown)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IUnknown_AddRef(iface); return S_OK; } @@ -157,7 +157,7 @@ /* the only other interface Wine is currently able to marshal (for testing two proxies) */ IsEqualGUID(riid, &IID_IRemUnknown)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IClassFactory_AddRef(iface); return S_OK; } @@ -220,7 +220,7 @@ static DWORD CALLBACK host_object_proc(LPVOID p) { - struct host_object_data *data = (struct host_object_data *)p; + struct host_object_data *data = p; HRESULT hr; MSG msg; @@ -833,7 +833,7 @@ /* helper for test_no_couninitialize_server */ static DWORD CALLBACK no_couninitialize_server_proc(LPVOID p) { - struct ncu_params *ncu_params = (struct ncu_params *)p; + struct ncu_params *ncu_params = p; HRESULT hr; pCoInitializeEx(NULL, COINIT_MULTITHREADED); @@ -899,7 +899,7 @@ /* STA -> STA call during DLL_THREAD_DETACH */ static DWORD CALLBACK no_couninitialize_client_proc(LPVOID p) { - struct ncu_params *ncu_params = (struct ncu_params *)p; + struct ncu_params *ncu_params = p; HRESULT hr; IUnknown *pProxy = NULL; @@ -1370,7 +1370,7 @@ /* helper for test_proxy_used_in_wrong_thread */ static DWORD CALLBACK bad_thread_proc(LPVOID p) { - IClassFactory * cf = (IClassFactory *)p; + IClassFactory * cf = p; HRESULT hr; IUnknown * proxy = NULL; @@ -1447,7 +1447,7 @@ IClassFactory_QueryInterface(pProxy, &IID_IStream, (LPVOID *)&pStream); /* create a thread that we can misbehave in */ - thread = CreateThread(NULL, 0, bad_thread_proc, (LPVOID)pProxy, 0, &tid2); + thread = CreateThread(NULL, 0, bad_thread_proc, pProxy, 0, &tid2); WaitForSingleObject(thread, INFINITE); CloseHandle(thread); @@ -1468,7 +1468,7 @@ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IClassFactory)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IClassFactory_AddRef(iface); return S_OK; } @@ -1679,7 +1679,7 @@ if (IsEqualIID(riid, &IID_IUnknown)) { IUnknown_AddRef(iface); - *ppv = (LPVOID)iface; + *ppv = iface; return S_OK; } *ppv = NULL; @@ -2040,6 +2040,19 @@ } } +static SIZE_T round_heap_size(SIZE_T size) +{ + static SIZE_T heap_size_alignment = -1; + if (heap_size_alignment == -1) + { + void *p = HeapAlloc(GetProcessHeap(), 0, 1); + heap_size_alignment = HeapSize(GetProcessHeap(), 0, p); + HeapFree(GetProcessHeap(), 0, p); + } + + return ((size + heap_size_alignment - 1) & ~(heap_size_alignment - 1)); +} + static void test_freethreadedmarshaldata(IStream *pStream, MSHCTX mshctx, void *ptr, DWORD mshlflags) { HGLOBAL hglobal; @@ -2056,7 +2069,7 @@ if (mshctx == MSHCTX_INPROC) { - DWORD expected_size = 3*sizeof(DWORD) + sizeof(GUID); + DWORD expected_size = round_heap_size(3*sizeof(DWORD) + sizeof(GUID)); ok(size == expected_size, "size should have been %d instead of %d\n", expected_size, size); ok(*(DWORD *)marshal_data == mshlflags, "expected 0x%x, but got 0x%x for mshctx\n", mshlflags, *(DWORD *)marshal_data); @@ -2105,7 +2118,7 @@ /* inproc normal marshaling */ hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, - (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); + &Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); ok_ole_success(hr, IMarshal_MarshalInterface); ok_more_than_one_lock(); @@ -2127,7 +2140,7 @@ /* local normal marshaling */ IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_LOCAL, NULL, MSHLFLAGS_NORMAL); + hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, &Test_ClassFactory, MSHCTX_LOCAL, NULL, MSHLFLAGS_NORMAL); ok_ole_success(hr, IMarshal_MarshalInterface); ok_more_than_one_lock(); @@ -2193,7 +2206,7 @@ IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, - (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); + &Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); ok_ole_success(hr, IMarshal_MarshalInterface); ok_more_than_one_lock(); @@ -2222,11 +2235,9 @@ IMarshal_Release(pFTMarshal); } -static void test_inproc_handler(void) -{ - HRESULT hr; - IUnknown *pObject; - IUnknown *pObject2; +static void reg_unreg_wine_test_class(BOOL Register) +{ + HRESULT hr; char buffer[256]; LPOLESTR pszClsid; HKEY hkey; @@ -2239,11 +2250,29 @@ WideCharToMultiByte(CP_ACP, 0, pszClsid, -1, buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), NULL, NULL); CoTaskMemFree(pszClsid); strcat(buffer, "\\InprocHandler32"); - error = RegCreateKeyEx(HKEY_CLASSES_ROOT, buffer, 0, NULL, 0, KEY_SET_VALUE, NULL, &hkey, &dwDisposition); - ok(error == ERROR_SUCCESS, "RegCreateKeyEx failed with error %d\n", error); - error = RegSetValueEx(hkey, NULL, 0, REG_SZ, (const unsigned char *)"ole32.dll", strlen("ole32.dll") + 1); - ok(error == ERROR_SUCCESS, "RegSetValueEx failed with error %d\n", error); - RegCloseKey(hkey); + if (Register) + { + error = RegCreateKeyEx(HKEY_CLASSES_ROOT, buffer, 0, NULL, 0, KEY_SET_VALUE, NULL, &hkey, &dwDisposition); + ok(error == ERROR_SUCCESS, "RegCreateKeyEx failed with error %d\n", error); + error = RegSetValueEx(hkey, NULL, 0, REG_SZ, (const unsigned char *)"ole32.dll", strlen("ole32.dll") + 1); + ok(error == ERROR_SUCCESS, "RegSetValueEx failed with error %d\n", error); + RegCloseKey(hkey); + } + else + { + RegDeleteKey(HKEY_CLASSES_ROOT, buffer); + *strrchr(buffer, '\\') = '\0'; + RegDeleteKey(HKEY_CLASSES_ROOT, buffer); + } +} + +static void test_inproc_handler(void) +{ + HRESULT hr; + IUnknown *pObject; + IUnknown *pObject2; + + reg_unreg_wine_test_class(TRUE); hr = CoCreateInstance(&CLSID_WineTest, NULL, CLSCTX_INPROC_HANDLER, &IID_IUnknown, (void **)&pObject); todo_wine @@ -2262,9 +2291,7 @@ IUnknown_Release(pObject); } - RegDeleteKey(HKEY_CLASSES_ROOT, buffer); - *strrchr(buffer, '\\') = '\0'; - RegDeleteKey(HKEY_CLASSES_ROOT, buffer); + reg_unreg_wine_test_class(FALSE); } static HRESULT WINAPI Test_SMI_QueryInterface( @@ -2277,7 +2304,7 @@ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IStdMarshalInfo)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IClassFactory_AddRef(iface); return S_OK; } @@ -2327,6 +2354,7 @@ HANDLE thread; static const LARGE_INTEGER ullZero; + reg_unreg_wine_test_class(TRUE); cLocks = 0; hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); @@ -2359,6 +2387,7 @@ } end_host_object(tid, thread); + reg_unreg_wine_test_class(FALSE); /* FIXME: test IPersist interface has the same effect as IStdMarshalInfo */ } @@ -2437,7 +2466,7 @@ CoTaskMemFree(pServerPrincName); - hr = IClientSecurity_QueryBlanket(pCliSec, (IUnknown *)pUnknown1, &dwAuthnSvc, &dwAuthzSvc, &pServerPrincName, &dwAuthnLevel, &dwImpLevel, &pAuthInfo, &dwCapabilities); + hr = IClientSecurity_QueryBlanket(pCliSec, pUnknown1, &dwAuthnSvc, &dwAuthzSvc, &pServerPrincName, &dwAuthnLevel, &dwImpLevel, &pAuthInfo, &dwCapabilities); todo_wine ok_ole_success(hr, "IClientSecurity_QueryBlanket(IUnknown)"); CoTaskMemFree(pServerPrincName); @@ -2479,7 +2508,7 @@ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IClassFactory)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IClassFactory_AddRef(iface); return S_OK; } @@ -2694,14 +2723,17 @@ static DWORD CALLBACK get_global_interface_proc(LPVOID pv) { HRESULT hr; - struct git_params *params = (struct git_params *)pv; + struct git_params *params = pv; IClassFactory *cf; hr = IGlobalInterfaceTable_GetInterfaceFromGlobal(params->git, params->cookie, &IID_IClassFactory, (void **)&cf); ok(hr == CO_E_NOTINITIALIZED || - hr == E_UNEXPECTED, /* win2k */ + broken(hr == E_UNEXPECTED) /* win2k */ || + broken(hr == S_OK) /* NT 4 */, "IGlobalInterfaceTable_GetInterfaceFromGlobal should have failed with error CO_E_NOTINITIALIZED or E_UNEXPECTED instead of 0x%08x\n", hr); + if (hr == S_OK) + IClassFactory_Release(cf); CoInitialize(NULL); Modified: trunk/rostests/winetests/ole32/moniker.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/moniker.c…
============================================================================== --- trunk/rostests/winetests/ole32/moniker.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/moniker.c [iso-8859-1] Sun Feb 8 02:56:01 2009 @@ -82,6 +82,19 @@ InterlockedDecrement(&cLocks); } +static SIZE_T round_heap_size(SIZE_T size) +{ + static SIZE_T heap_size_alignment = -1; + if (heap_size_alignment == -1) + { + void *p = HeapAlloc(GetProcessHeap(), 0, 1); + heap_size_alignment = HeapSize(GetProcessHeap(), 0, p); + HeapFree(GetProcessHeap(), 0, p); + } + + return ((size + heap_size_alignment - 1) & ~(heap_size_alignment - 1)); +} + static HRESULT WINAPI Test_IClassFactory_QueryInterface( LPCLASSFACTORY iface, REFIID riid, @@ -92,7 +105,7 @@ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IClassFactory)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IClassFactory_AddRef(iface); return S_OK; } @@ -151,7 +164,7 @@ if (IsEqualIID(riid, &IID_IUnknown)) { IUnknown_AddRef(iface); - *ppv = (LPVOID)iface; + *ppv = iface; return S_OK; } *ppv = NULL; @@ -1204,12 +1217,12 @@ moniker_data = GlobalLock(hglobal); /* first check we have the right amount of data */ - ok(moniker_size == sizeof_expected_moniker_saved_data, + ok(moniker_size == round_heap_size(sizeof_expected_moniker_saved_data), "%s: Size of saved data differs (expected %d, actual %d)\n", - testname, sizeof_expected_moniker_saved_data, moniker_size); + testname, (DWORD)round_heap_size(sizeof_expected_moniker_saved_data), moniker_size); /* then do a byte-by-byte comparison */ - for (i = 0; i < min(moniker_size, sizeof_expected_moniker_saved_data); i++) + for (i = 0; i < min(moniker_size, round_heap_size(sizeof_expected_moniker_saved_data)); i++) { if (expected_moniker_saved_data[i] != moniker_data[i]) { @@ -1250,14 +1263,14 @@ moniker_data = GlobalLock(hglobal); /* first check we have the right amount of data */ - ok(moniker_size == sizeof_expected_moniker_marshal_data, + ok(moniker_size == round_heap_size(sizeof_expected_moniker_marshal_data), "%s: Size of marshaled data differs (expected %d, actual %d)\n", - testname, sizeof_expected_moniker_marshal_data, moniker_size); + testname, (DWORD)round_heap_size(sizeof_expected_moniker_marshal_data), moniker_size); /* then do a byte-by-byte comparison */ if (expected_moniker_marshal_data) { - for (i = 0; i < min(moniker_size, sizeof_expected_moniker_marshal_data); i++) + for (i = 0; i < min(moniker_size, round_heap_size(sizeof_expected_moniker_marshal_data)); i++) { if (expected_moniker_marshal_data[i] != moniker_data[i]) { Modified: trunk/rostests/winetests/ole32/ole2.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/ole2.c?re…
============================================================================== --- trunk/rostests/winetests/ole32/ole2.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/ole2.c [iso-8859-1] Sun Feb 8 02:56:01 2009 @@ -68,7 +68,7 @@ *ppv = NULL; if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IOleObject)) - *ppv = (void *)iface; + *ppv = iface; else if (IsEqualIID(riid, &IID_IPersistStorage)) *ppv = &OleObjectPersistStg; else if (IsEqualIID(riid, &IID_IOleCache)) @@ -1497,7 +1497,7 @@ NULL }; - IOleObject *object = (IOleObject *)&OleObject; + IOleObject *object = &OleObject; expected_method_list = methods_query_runnable; ok(OleIsRunning(object), "Object should be running\n"); Modified: trunk/rostests/winetests/ole32/stg_prop.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/stg_prop.…
============================================================================== --- trunk/rostests/winetests/ole32/stg_prop.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/stg_prop.c [iso-8859-1] Sun Feb 8 02:56:01 2009 @@ -100,7 +100,7 @@ /* test setting one by name with an invalid propidNameFirst */ spec.ulKind = PRSPEC_LPWSTR; - U(spec).lpwstr = (LPOLESTR)propName; + U(spec).lpwstr = propName; hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, PID_DICTIONARY); ok(hr == STG_E_INVALIDPARAMETER, @@ -123,7 +123,7 @@ /* set one by name */ spec.ulKind = PRSPEC_LPWSTR; - U(spec).lpwstr = (LPOLESTR)propName; + U(spec).lpwstr = propName; U(var).lVal = 2; hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, PID_FIRST_USABLE); @@ -164,7 +164,7 @@ var.vt, U(var).lVal); /* read by name */ spec.ulKind = PRSPEC_LPWSTR; - U(spec).lpwstr = (LPOLESTR)propName; + U(spec).lpwstr = propName; hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); ok(var.vt == VT_I4 && U(var).lVal == 2, @@ -237,7 +237,7 @@ ok(hr == S_OK, "Commit failed: 0x%08x\n", hr); /* set it to a string value */ var.vt = VT_LPSTR; - U(var).pszVal = (LPSTR)val; + U(var).pszVal = val; hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); /* revert it */ @@ -269,7 +269,7 @@ /* check properties again */ spec.ulKind = PRSPEC_LPWSTR; - U(spec).lpwstr = (LPOLESTR)propName; + U(spec).lpwstr = propName; hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); ok(var.vt == VT_I4 && U(var).lVal == 2, Modified: trunk/rostests/winetests/ole32/usrmarshal.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/usrmarsha…
============================================================================== --- trunk/rostests/winetests/ole32/usrmarshal.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/usrmarshal.c [iso-8859-1] Sun Feb 8 02:56:01 2009 @@ -386,7 +386,7 @@ if (IsEqualGUID(riid, &IID_IUnknown)) { - *ppvObj = (LPVOID)iface; + *ppvObj = iface; IUnknown_AddRef(iface); return S_OK; }
15 years, 10 months
1
0
0
0
[cwittich] 39473: sync oleaur32_winetest with wine 1.1.14
by cwittich@svn.reactos.org
Author: cwittich Date: Sun Feb 8 02:55:17 2009 New Revision: 39473 URL:
http://svn.reactos.org/svn/reactos?rev=39473&view=rev
Log: sync oleaur32_winetest with wine 1.1.14 Modified: trunk/rostests/winetests/oleaut32/oleaut32.rbuild trunk/rostests/winetests/oleaut32/olepicture.c trunk/rostests/winetests/oleaut32/safearray.c trunk/rostests/winetests/oleaut32/tmarshal.c trunk/rostests/winetests/oleaut32/tmarshal.idl trunk/rostests/winetests/oleaut32/typelib.c trunk/rostests/winetests/oleaut32/usrmarshal.c trunk/rostests/winetests/oleaut32/vartest.c trunk/rostests/winetests/oleaut32/vartype.c Modified: trunk/rostests/winetests/oleaut32/oleaut32.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/oleaut…
============================================================================== --- trunk/rostests/winetests/oleaut32/oleaut32.rbuild [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/oleaut32.rbuild [iso-8859-1] Sun Feb 8 02:55:17 2009 @@ -5,7 +5,7 @@ <include base="oleaut32_winetest">.</include> <include base="ReactOS">include/reactos/wine</include> <include base="oleaut32_winetest" root="intermediate">.</include> - <define name="__ROS_LONG64__" /> + <define name="__ROS_LONG64__" /> <library>wine</library> <library>oleaut32</library> <library>ole32</library> @@ -16,6 +16,7 @@ <library>kernel32</library> <library>uuid</library> <library>ntdll</library> + <library>tmarshal_interface</library> <file>olefont.c</file> <file>olepicture.c</file> <file>safearray.c</file> @@ -35,6 +36,10 @@ <dependency>stdole2</dependency> <file>tmarshal.idl</file> </module> +<module name="tmarshal_interface" type="idlinterface"> + <dependency>stdole2</dependency> + <file>tmarshal.idl</file> +</module> <module name="test_tlb" type="embeddedtypelib" allowwarnings="true"> <dependency>stdole2</dependency> <file>test_tlb.idl</file> Modified: trunk/rostests/winetests/oleaut32/olepicture.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/olepic…
============================================================================== --- trunk/rostests/winetests/oleaut32/olepicture.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/olepicture.c [iso-8859-1] Sun Feb 8 02:55:17 2009 @@ -324,6 +324,7 @@ ULARGE_INTEGER newpos1; LARGE_INTEGER seekto; short type; + DWORD attr; /* Empty image. Happens occasionally in VB programs. */ hglob = GlobalAlloc (0, 8); @@ -346,6 +347,11 @@ hres = IPicture_get_Type (pic, &type); ok (hres == S_OK,"empty picture get type failed with hres 0x%08x\n", hres); ok (type == PICTYPE_NONE,"type is %d, but should be PICTYPE_NONE(0)\n", type); + + attr = 0xdeadbeef; + hres = IPicture_get_Attributes (pic, &attr); + ok (hres == S_OK,"empty picture get attributes failed with hres 0x%08x\n", hres); + ok (attr == 0,"attr is %d, but should be 0\n", attr); hres = IPicture_get_Handle (pic, &handle); ok (hres == S_OK,"empty picture get handle failed with hres 0x%08x\n", hres); @@ -489,7 +495,7 @@ IPicture_Release(pict); } -static void test_apm() +static void test_apm(void) { OLE_HANDLE handle; LPSTREAM stream; @@ -643,6 +649,55 @@ IPicture_Release(pic); ReleaseDC(NULL, hdc); +} + +static void test_get_Attributes(void) +{ + IPicture *pic; + HRESULT hres; + short type; + DWORD attr; + + OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (VOID**)&pic); + hres = IPicture_get_Type(pic, &type); + ok(hres == S_OK, "IPicture_get_Type does not return S_OK, but 0x%08x\n", hres); + ok(type == PICTYPE_UNINITIALIZED, "Expected type = PICTYPE_UNINITIALIZED, got = %d\n", type); + + hres = IPicture_get_Attributes(pic, NULL); + ole_expect(hres, E_POINTER); + + attr = 0xdeadbeef; + hres = IPicture_get_Attributes(pic, &attr); + ole_expect(hres, S_OK); + ok(attr == 0, "IPicture_get_Attributes does not reset attr to zero, got %d\n", attr); + + IPicture_Release(pic); +} + +static void test_get_Handle(void) +{ + IPicture *pic; + HRESULT hres; + + OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (VOID**)&pic); + + hres = IPicture_get_Handle(pic, NULL); + ole_expect(hres, E_POINTER); + + IPicture_Release(pic); +} + +static void test_get_Type(void) +{ + IPicture *pic; + HRESULT hres; + + OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (VOID**)&pic); + + hres = IPicture_get_Type(pic, NULL); + ole_expect(hres, E_POINTER); + + IPicture_Release(pic); } START_TEST(olepicture) @@ -672,6 +727,9 @@ test_Invoke(); test_OleCreatePictureIndirect(); test_Render(); + test_get_Attributes(); + test_get_Handle(); + test_get_Type(); } @@ -702,11 +760,11 @@ *ppvObject = 0; if (memcmp(&IID_IUnknown, riid, sizeof(IID_IUnknown)) == 0) { - *ppvObject = (IStream*)This; + *ppvObject = This; } else if (memcmp(&IID_IStream, riid, sizeof(IID_IStream)) == 0) { - *ppvObject = (IStream*)This; + *ppvObject = This; } if ((*ppvObject)==0) Modified: trunk/rostests/winetests/oleaut32/safearray.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/safear…
============================================================================== --- trunk/rostests/winetests/oleaut32/safearray.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/safearray.c [iso-8859-1] Sun Feb 8 02:55:17 2009 @@ -275,7 +275,7 @@ static void test_safearray(void) { SAFEARRAY *a, b, *c; - unsigned int i; + unsigned int i, diff; LONG indices[2]; HRESULT hres; SAFEARRAYBOUND bound, bounds[2]; @@ -434,19 +434,22 @@ indices[1] = 23; hres = SafeArrayPtrOfIndex(a, indices, (void**)&ptr2); ok(S_OK == hres,"SAPOI failed [1,23], hres 0x%x\n",hres); - ok(ptr2 - ptr1 == 8,"ptr difference is not 8, but %d (%p vs %p)\n", ptr2-ptr1, ptr2, ptr1); + diff = ptr2 - ptr1; + ok(diff == 8,"ptr difference is not 8, but %d (%p vs %p)\n", diff, ptr2, ptr1); indices[0] = 3; indices[1] = 24; hres = SafeArrayPtrOfIndex(a, indices, (void**)&ptr2); ok(S_OK == hres,"SAPOI failed [5,24], hres 0x%x\n",hres); - ok(ptr2 - ptr1 == 176,"ptr difference is not 176, but %d (%p vs %p)\n", ptr2-ptr1, ptr2, ptr1); + diff = ptr2 - ptr1; + ok(diff == 176,"ptr difference is not 176, but %d (%p vs %p)\n", diff, ptr2, ptr1); indices[0] = 20; indices[1] = 23; hres = SafeArrayPtrOfIndex(a, indices, (void**)&ptr2); ok(S_OK == hres,"SAPOI failed [20,23], hres 0x%x\n",hres); - ok(ptr2 - ptr1 == 76,"ptr difference is not 76, but %d (%p vs %p)\n", ptr2-ptr1, ptr2, ptr1); + diff = ptr2 - ptr1; + ok(diff == 76,"ptr difference is not 76, but %d (%p vs %p)\n", diff, ptr2, ptr1); hres = SafeArrayUnaccessData(a); ok(S_OK == hres, "SAUAD failed with 0x%x\n", hres); @@ -1271,7 +1274,7 @@ /* Fill the source array with some data; it doesn't matter what */ for (dimension = 0; dimension < size; dimension++) { - int* data = (int*)sa->pvData; + int* data = sa->pvData; data[dimension] = dimension; } @@ -1417,7 +1420,7 @@ /* Win32 doesn't care if GetSize fails */ fail_GetSize = TRUE; - sa = pSafeArrayCreateEx(VT_RECORD, 1, sab, (LPVOID)iRec); + sa = pSafeArrayCreateEx(VT_RECORD, 1, sab, iRec); ok(sa != NULL, "CreateEx (Fail Size) failed\n"); ok(iRec->ref == START_REF_COUNT + 1, "Wrong iRec refcount %d\n", iRec->ref); ok(iRec->sizeCalled == 1, "GetSize called %d times\n", iRec->sizeCalled); @@ -1434,7 +1437,7 @@ iRec->ref = START_REF_COUNT; iRec->sizeCalled = 0; iRec->clearCalled = 0; - sa = pSafeArrayCreateEx(VT_RECORD, 1, sab, (LPVOID)iRec); + sa = pSafeArrayCreateEx(VT_RECORD, 1, sab, iRec); ok(sa != NULL, "CreateEx (Rec) failed\n"); ok(iRec->ref == START_REF_COUNT + 1, "Wrong iRec refcount %d\n", iRec->ref); ok(iRec->sizeCalled == 1, "GetSize called %d times\n", iRec->sizeCalled); Modified: trunk/rostests/winetests/oleaut32/tmarshal.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/tmarsh…
============================================================================== --- trunk/rostests/winetests/oleaut32/tmarshal.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/tmarshal.c [iso-8859-1] Sun Feb 8 02:55:17 2009 @@ -135,7 +135,7 @@ static DWORD CALLBACK host_object_proc(LPVOID p) { - struct host_object_data *data = (struct host_object_data *)p; + struct host_object_data *data = p; HRESULT hr; MSG msg; @@ -546,7 +546,7 @@ return S_OK; } -static void WINAPI Widget_Variant( +static HRESULT WINAPI Widget_Variant( IWidget __RPC_FAR * iface, VARIANT var) { @@ -554,9 +554,10 @@ ok(V_VT(&var) == VT_CY, "V_VT(&var) was %d\n", V_VT(&var)); ok(S(V_CY(&var)).Hi == 0xdababe, "V_CY(&var).Hi was 0x%x\n", S(V_CY(&var)).Hi); ok(S(V_CY(&var)).Lo == 0xdeadbeef, "V_CY(&var).Lo was 0x%x\n", S(V_CY(&var)).Lo); -} - -static void WINAPI Widget_VarArg( + return S_OK; +} + +static HRESULT WINAPI Widget_VarArg( IWidget * iface, int numexpect, SAFEARRAY * values) @@ -586,9 +587,11 @@ hr = SafeArrayUnaccessData(values); ok(hr == S_OK, "SafeArrayUnaccessData failed with %x\n", hr); -} - -static void WINAPI Widget_StructArgs( + + return S_OK; +} + +static HRESULT WINAPI Widget_StructArgs( IWidget * iface, MYSTRUCT byval, MYSTRUCT *byptr, @@ -597,6 +600,7 @@ ok(memcmp(&byval, &MYSTRUCT_BYVAL, sizeof(MYSTRUCT))==0, "Struct parameter passed by value corrupted\n"); ok(memcmp(byptr, &MYSTRUCT_BYPTR, sizeof(MYSTRUCT))==0, "Struct parameter passed by pointer corrupted\n"); ok(memcmp(arr, MYSTRUCT_ARRAY, sizeof(MYSTRUCT_ARRAY))==0, "Array of structs corrupted\n"); + return S_OK; } @@ -1102,7 +1106,10 @@ /* call StructArgs (direct) */ mystruct = MYSTRUCT_BYPTR; memcpy(mystructArray, MYSTRUCT_ARRAY, sizeof(mystructArray)); - IWidget_StructArgs(pWidget, MYSTRUCT_BYVAL, &mystruct, mystructArray); + hr = IWidget_StructArgs(pWidget, MYSTRUCT_BYVAL, &mystruct, mystructArray); + todo_wine { + ok_ole_success(hr, IWidget_StructArgs); + } /* call Clone */ dispparams.cNamedArgs = 0; Modified: trunk/rostests/winetests/oleaut32/tmarshal.idl URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/tmarsh…
============================================================================== --- trunk/rostests/winetests/oleaut32/tmarshal.idl [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/tmarshal.idl [iso-8859-1] Sun Feb 8 02:55:17 2009 @@ -112,13 +112,13 @@ HRESULT VariantArrayPtr([in] SAFEARRAY(VARIANT) *values); [id(DISPID_TM_VARIANT)] - void Variant([in] VARIANT var); + HRESULT Variant([in] VARIANT var); [vararg, id(DISPID_TM_VARARG)] - void VarArg([in] int numexpect, [in] SAFEARRAY(VARIANT) values); + HRESULT VarArg([in] int numexpect, [in] SAFEARRAY(VARIANT) values); [id(DISPID_TM_STRUCTARGS)] - void StructArgs([in] MYSTRUCT byval, [in] MYSTRUCT *byptr, [in] MYSTRUCT arr[5]); + HRESULT StructArgs([in] MYSTRUCT byval, [in] MYSTRUCT *byptr, [in] MYSTRUCT arr[5]); [id(DISPID_TM_ERROR)] HRESULT Error(); Modified: trunk/rostests/winetests/oleaut32/typelib.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/typeli…
============================================================================== --- trunk/rostests/winetests/oleaut32/typelib.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/typelib.c [iso-8859-1] Sun Feb 8 02:55:17 2009 @@ -27,11 +27,9 @@ #include "windef.h" #include "winbase.h" - #include "oleauto.h" #include "ocidl.h" #include "shlwapi.h" -#include "initguid.h" #include "tmarshal.h" #define expect_eq(expr, value, type, format) { type _ret = (expr); ok((value) == _ret, #expr " expected " format " got " format "\n", value, _ret); } @@ -401,7 +399,7 @@ ok(pFuncDesc->invkind == methdata[1].wFlags, "invkind %d\n", pFuncDesc->invkind); ok(pFuncDesc->callconv == methdata[1].cc, "callconv %d\n", pFuncDesc->callconv); ok(pFuncDesc->cParams == methdata[1].cArgs, "cParams %d\n", pFuncDesc->cParams); - ok(pFuncDesc->oVft == 4, "oVft %d\n", pFuncDesc->oVft); + ok(pFuncDesc->oVft == sizeof(void *), "oVft %d\n", pFuncDesc->oVft); ok(pFuncDesc->wFuncFlags == 0, "oVft %d\n", pFuncDesc->wFuncFlags); ok(pFuncDesc->elemdescFunc.tdesc.vt == VT_I4, "ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt); ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc); @@ -412,7 +410,7 @@ ok(pFuncDesc->invkind == methdata[2].wFlags, "invkind %d\n", pFuncDesc->invkind); ok(pFuncDesc->callconv == methdata[2].cc, "callconv %d\n", pFuncDesc->callconv); ok(pFuncDesc->cParams == methdata[2].cArgs, "cParams %d\n", pFuncDesc->cParams); - ok(pFuncDesc->oVft == 12, "oVft %d\n", pFuncDesc->oVft); + ok(pFuncDesc->oVft == 3 * sizeof(void *), "oVft %d\n", pFuncDesc->oVft); ok(pFuncDesc->wFuncFlags == 0, "oVft %d\n", pFuncDesc->wFuncFlags); ok(pFuncDesc->elemdescFunc.tdesc.vt == VT_HRESULT, "ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt); ok(pFuncDesc->lprgelemdescParam[0].tdesc.vt == VT_I4, "parm 0 vt %x\n", pFuncDesc->lprgelemdescParam[0].tdesc.vt); @@ -425,7 +423,7 @@ ok(pFuncDesc->invkind == methdata[3].wFlags, "invkind %d\n", pFuncDesc->invkind); ok(pFuncDesc->callconv == methdata[3].cc, "callconv %d\n", pFuncDesc->callconv); ok(pFuncDesc->cParams == methdata[3].cArgs, "cParams %d\n", pFuncDesc->cParams); - ok(pFuncDesc->oVft == 16, "oVft %d\n", pFuncDesc->oVft); + ok(pFuncDesc->oVft == 4 * sizeof(void *), "oVft %d\n", pFuncDesc->oVft); ok(pFuncDesc->wFuncFlags == 0, "oVft %d\n", pFuncDesc->wFuncFlags); ok(pFuncDesc->elemdescFunc.tdesc.vt == VT_I4, "ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt); ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc); @@ -651,7 +649,7 @@ BSTR path; status = UuidCreate(&uid); - ok(!status || status == RPC_S_UUID_LOCAL_ONLY, "UuidCreate error %08lx\n", status); + ok(!status || status == RPC_S_UUID_LOCAL_ONLY, "UuidCreate error %08x\n", status); StringFromGUID2(&uid, uid_str, 40); /*trace("GUID: %s\n", wine_dbgstr_w(uid_str));*/ @@ -705,7 +703,7 @@ hr = ITypeInfo_GetTypeAttr(pTI, &pTA); ok(hr == S_OK, "hr %08x\n", hr); ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); + ok(pTA->cbSizeVft == 7 * sizeof(void *), "sizevft %d\n", pTA->cbSizeVft); ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags); if(use_midl_tlb) { ok(pTA->cFuncs == 6, "cfuncs %d\n", pTA->cFuncs); @@ -727,7 +725,7 @@ hr = ITypeInfo_GetFuncDesc(pTI, 5, &pFD); ok(hr == S_OK, "hr %08x\n", hr); ok(pFD->memid == 0x60020000, "memid %08x\n", pFD->memid); - ok(pFD->oVft == 20, "oVft %d\n", pFD->oVft); + ok(pFD->oVft == 5 * sizeof(void *), "oVft %d\n", pFD->oVft); ITypeInfo_ReleaseFuncDesc(pTI, pFD); } ITypeInfo_Release(pTI); @@ -740,7 +738,7 @@ hr = ITypeInfo_GetTypeAttr(pTI, &pTA); ok(hr == S_OK, "hr %08x\n", hr); ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); + ok(pTA->cbSizeVft == 7 * sizeof(void *), "sizevft %d\n", pTA->cbSizeVft); ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags); ok(pTA->cFuncs == 1, "cfuncs %d\n", pTA->cFuncs); ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes); @@ -770,7 +768,7 @@ hr = ITypeInfo_GetTypeAttr(pTI, &pTA); ok(hr == S_OK, "hr %08x\n", hr); ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); + ok(pTA->cbSizeVft == 7 * sizeof(void *), "sizevft %d\n", pTA->cbSizeVft); if(use_midl_tlb) { ok(pTA->wTypeFlags == TYPEFLAG_FDUAL, "typeflags %x\n", pTA->wTypeFlags); } @@ -801,7 +799,7 @@ hr = ITypeInfo_GetTypeAttr(pTI, &pTA); ok(hr == S_OK, "hr %08x\n", hr); ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); + ok(pTA->cbSizeVft == 7 * sizeof(void *), "sizevft %d\n", pTA->cbSizeVft); ok(pTA->wTypeFlags == (TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL), "typeflags %x\n", pTA->wTypeFlags); ok(pTA->cFuncs == 10, "cfuncs %d\n", pTA->cFuncs); ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes); @@ -829,7 +827,7 @@ hr = ITypeInfo_GetTypeAttr(pTI, &pTA); ok(hr == S_OK, "hr %08x\n", hr); ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); + ok(pTA->cbSizeVft == 7 * sizeof(void *), "sizevft %d\n", pTA->cbSizeVft); ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags); if(use_midl_tlb) { ok(pTA->cFuncs == 3, "cfuncs %d\n", pTA->cFuncs); @@ -853,7 +851,7 @@ hr = ITypeInfo_GetFuncDesc(pTI, 2, &pFD); ok(hr == S_OK, "hr %08x\n", hr); ok(pFD->memid == 0x60010000, "memid %08x\n", pFD->memid); - ok(pFD->oVft == 8, "oVft %d\n", pFD->oVft); + ok(pFD->oVft == 2 * sizeof(void *), "oVft %d\n", pFD->oVft); ITypeInfo_ReleaseFuncDesc(pTI, pFD); } ITypeInfo_Release(pTI); @@ -865,7 +863,7 @@ hr = ITypeInfo_GetTypeAttr(pTI, &pTA); ok(hr == S_OK, "hr %08x\n", hr); ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); + ok(pTA->cbSizeVft == 7 * sizeof(void *), "sizevft %d\n", pTA->cbSizeVft); ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags); if(use_midl_tlb) { ok(pTA->cFuncs == 10, "cfuncs %d\n", pTA->cFuncs); @@ -887,7 +885,7 @@ hr = ITypeInfo_GetFuncDesc(pTI, 9, &pFD); ok(hr == S_OK, "hr %08x\n", hr); ok(pFD->memid == 0x1236, "memid %08x\n", pFD->memid); - ok(pFD->oVft == 36, "oVft %d\n", pFD->oVft); + ok(pFD->oVft == 9 * sizeof(void *), "oVft %d\n", pFD->oVft); ITypeInfo_ReleaseFuncDesc(pTI, pFD); } ITypeInfo_Release(pTI); @@ -900,7 +898,7 @@ hr = ITypeInfo_GetTypeAttr(pTI, &pTA); ok(hr == S_OK, "hr %08x\n", hr); ok(pTA->typekind == TKIND_INTERFACE, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 24, "sizevft %d\n", pTA->cbSizeVft); + ok(pTA->cbSizeVft == 6 * sizeof(void *), "sizevft %d\n", pTA->cbSizeVft); ok(pTA->wTypeFlags == 0, "typeflags %x\n", pTA->wTypeFlags); if(use_midl_tlb) { ok(pTA->cFuncs == 1, "cfuncs %d\n", pTA->cFuncs); @@ -913,7 +911,7 @@ hr = ITypeInfo_GetFuncDesc(pTI, 0, &pFD); ok(hr == S_OK, "hr %08x\n", hr); ok(pFD->memid == 0x60020000, "memid %08x\n", pFD->memid); - ok(pFD->oVft == 20, "oVft %d\n", pFD->oVft); + ok(pFD->oVft == 5 * sizeof(void *), "oVft %d\n", pFD->oVft); ITypeInfo_ReleaseFuncDesc(pTI, pFD); } ITypeInfo_Release(pTI); Modified: trunk/rostests/winetests/oleaut32/usrmarshal.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/usrmar…
============================================================================== --- trunk/rostests/winetests/oleaut32/usrmarshal.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/usrmarshal.c [iso-8859-1] Sun Feb 8 02:55:17 2009 @@ -154,7 +154,7 @@ { GUID guid; SafeArrayGetIID(lpsa, &guid); - ok(IsEqualGUID(&guid, (GUID*)wiresa), "guid mismatch\n"); + ok(IsEqualGUID(&guid, wiresa), "guid mismatch\n"); wiresa += sizeof(GUID); } ok(!memcmp(wiresa, lpsa->rgsabound, sizeof(lpsa->rgsabound[0]) * lpsa->cDims), "bounds mismatch\n"); @@ -444,7 +444,7 @@ if (IsEqualIID(riid, &IID_IUnknown)) { IUnknown_AddRef(iface); - *ppv = (LPVOID)iface; + *ppv = iface; return S_OK; } *ppv = NULL; Modified: trunk/rostests/winetests/oleaut32/vartest.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/vartes…
============================================================================== --- trunk/rostests/winetests/oleaut32/vartest.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/vartest.c [iso-8859-1] Sun Feb 8 02:55:17 2009 @@ -2838,7 +2838,7 @@ S1(U1(*pdec)).Mid32 = 0; S1(U1(*pdec)).Lo32 = 1; hres = pVarFix(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && !memcmp(&v, &vDst, sizeof(v)), + ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && !memcmp(&V_DECIMAL(&v), &V_DECIMAL(&vDst), sizeof(DECIMAL)), "VarFix: expected 0x0,%d,identical, got 0x%X,%d\n", VT_DECIMAL, hres, V_VT(&vDst)); @@ -2953,7 +2953,7 @@ S1(U1(*pdec)).Mid32 = 0; S1(U1(*pdec)).Lo32 = 1; hres = pVarInt(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && !memcmp(&v, &vDst, sizeof(v)), + ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && !memcmp(&V_DECIMAL(&v), &V_DECIMAL(&vDst), sizeof(DECIMAL)), "VarInt: expected 0x0,%d,identical, got 0x%X,%d\n", VT_DECIMAL, hres, V_VT(&vDst)); Modified: trunk/rostests/winetests/oleaut32/vartype.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/vartyp…
============================================================================== --- trunk/rostests/winetests/oleaut32/vartype.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/vartype.c [iso-8859-1] Sun Feb 8 02:55:17 2009 @@ -554,7 +554,7 @@ } if (*ppvObject) { - DummyDispatch_AddRef((IDispatch*)*ppvObject); + DummyDispatch_AddRef(*ppvObject); return S_OK; } } @@ -5060,7 +5060,7 @@ BSTR str = GetBSTR(&bstr); bstr.dwLen = 0; - ok (SysStringByteLen(str) == 0, "Expected dwLen 0, got %d\n", SysStringLen(str)); + ok (SysStringByteLen(str) == 0, "Expected dwLen 0, got %d\n", SysStringByteLen(str)); bstr.dwLen = 2; ok (SysStringByteLen(str) == 2, "Expected dwLen 2, got %d\n", SysStringByteLen(str)); } @@ -5452,12 +5452,12 @@ /* =>IDispatch */ u.ref = 1; V_VT(&vSrc) = VT_UNKNOWN; - V_UNKNOWN(&vSrc) = (IUnknown*)pu; + V_UNKNOWN(&vSrc) = pu; VariantInit(&vDst); hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, VT_UNKNOWN); /* Note vSrc is not cleared, as final refcount is 2 */ ok(hres == S_OK && u.ref == 2 && - V_VT(&vDst) == VT_UNKNOWN && V_UNKNOWN(&vDst) == (IUnknown*)pu, + V_VT(&vDst) == VT_UNKNOWN && V_UNKNOWN(&vDst) == pu, "change unk(src,dst): expected 0x%08x,%d,%d,%p, got 0x%08x,%d,%d,%p\n", S_OK, 2, VT_UNKNOWN, pu, hres, u.ref, V_VT(&vDst), V_UNKNOWN(&vDst)); @@ -5467,7 +5467,7 @@ HRESULT hExpected = DISP_E_BADVARTYPE; V_VT(&vSrc) = VT_UNKNOWN; - V_UNKNOWN(&vSrc) = (IUnknown*)pu; + V_UNKNOWN(&vSrc) = pu; VariantInit(&vDst); if (vt == VT_UNKNOWN || vt == VT_DISPATCH || vt == VT_EMPTY || vt == VT_NULL)
15 years, 10 months
1
0
0
0
[cwittich] 39472: add new module type IdlInterface
by cwittich@svn.reactos.org
Author: cwittich Date: Sun Feb 8 02:54:47 2009 New Revision: 39472 URL:
http://svn.reactos.org/svn/reactos?rev=39472&view=rev
Log: add new module type IdlInterface Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp trunk/reactos/tools/rbuild/bootstrap.cpp trunk/reactos/tools/rbuild/include.cpp trunk/reactos/tools/rbuild/module.cpp trunk/reactos/tools/rbuild/rbuild.h Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/mingw…
============================================================================== --- trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp [iso-8859-1] (original) +++ trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp [iso-8859-1] Sun Feb 8 02:54:47 2009 @@ -58,6 +58,7 @@ { HostFalse, "", "", "-nostartfiles -nostdlib" }, // BootProgram { HostFalse, "", "", "" }, // Win32SCR { HostFalse, "", "", "" }, // IdlHeader + { HostFalse, "", "", "" }, // IdlInterface { HostFalse, "", "", "" }, // IsoRegTest { HostFalse, "", "", "" }, // LiveIsoRegTest { HostFalse, "", "", "" }, // EmbeddedTypeLib Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/mingw…
============================================================================== --- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp [iso-8859-1] (original) +++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp [iso-8859-1] Sun Feb 8 02:54:47 2009 @@ -173,6 +173,7 @@ case RpcProxy: case MessageHeader: case IdlHeader: + case IdlInterface: case EmbeddedTypeLib: case BootSector: handler = new MingwModuleHandler( module ); @@ -301,6 +302,8 @@ return true; if ( module.type == IdlHeader ) return true; + if ( module.type == IdlInterface ) + return true; if ( module.type == MessageHeader) return true; return false; @@ -428,6 +431,8 @@ newExtension = "_c.o"; else if ( module.type == RpcProxy ) newExtension = "_p.o"; + else if ( module.type == IdlInterface ) + newExtension = "_i.o"; else newExtension = ".h"; } @@ -1053,7 +1058,7 @@ "$(intermediate_path_noext).a", "$(intermediate_dir)$(SEP)", NULL ); Rule arRule2 ( "\t$(ECHO_AR)\n" - "\t${ar} -rc $@ $($(module_name)_OBJS)\n", + "\t${ar} -rc $@ $($(module_name)_OBJS) \n", NULL ); Rule arHostRule2 ( "\t$(ECHO_HOSTAR)\n" "\t${host_ar} -rc $@ $($(module_name)_OBJS)\n", @@ -1161,11 +1166,21 @@ "$(intermediate_path_unique).stubs.o.d", "$(intermediate_dir)$(SEP)", NULL ); Rule widlHeaderRule ( "$(source): ${$(module_name)_precondition}\n" - "$(intermediate_path_noext).h: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" + "$(intermediate_path_noext).h: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "\t$(ECHO_WIDL)\n" "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext).h $(source)\n", "$(intermediate_path_noext).h", "$(intermediate_dir)$(SEP)", NULL ); +Rule widlInterfaceRule ( "$(source): ${$(module_name)_precondition}\n" + "$(intermediate_path_noext)_i.c: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" + "\t$(ECHO_WIDL)\n" + "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -u -U $(intermediate_path_noext)_i.c $(source)\n" + "$(intermediate_path_noext)_i.o: $(intermediate_path_noext)_i.c $(dependencies) | $(intermediate_dir)\n" + "\t$(ECHO_CC)\n" + "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -c $<\n", + "$(intermediate_path_noext)_i.c", + "$(intermediate_path_noext)_i.o", + "$(intermediate_dir)$(SEP)", NULL ); Rule widlServerRule ( "$(source): ${$(module_name)_precondition}\n" "$(intermediate_path_noext)_s.c $(intermediate_path_noext)_s.h: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "\t$(ECHO_WIDL)\n" @@ -1185,7 +1200,7 @@ "$(intermediate_path_noext)_s.o.d", "$(intermediate_dir)$(SEP)", NULL ); Rule widlClientRule ( "$(source): ${$(module_name)_precondition}\n" - "$(intermediate_path_noext)_c.c $(intermediate_path_noext)_c.h: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" + "$(intermediate_path_noext)_c.c $(intermediate_path_noext)_c.h: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "\t$(ECHO_WIDL)\n" "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext)_c.h -c -C $(intermediate_path_noext)_c.c $(source)\n" "ifeq ($(ROS_BUILDDEPS),full)\n" @@ -1203,7 +1218,7 @@ "$(intermediate_path_noext)_c.o.d", "$(intermediate_dir)$(SEP)", NULL ); Rule widlProxyRule ( "$(source): ${$(module_name)_precondition}\n" - "$(intermediate_path_noext)_p.c $(intermediate_path_noext)_p.h: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" + "$(intermediate_path_noext)_p.c $(intermediate_path_noext)_p.h: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "\t$(ECHO_WIDL)\n" "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext)_p.h -p -P $(intermediate_path_noext)_p.c $(source)\n" "ifeq ($(ROS_BUILDDEPS),full)\n" @@ -1235,7 +1250,7 @@ "$(intermediate_path_noext).o", "$(intermediate_path_noext).o.d", NULL ); Rule widlTlbRule ( "$(source): ${$(module_name)_precondition}\n" - "$(intermediate_dir)$(SEP)$(module_name).tlb: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" + "$(intermediate_dir)$(SEP)$(module_name).tlb: $(source) $(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "\t$(ECHO_WIDL)\n" "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -t -T $(intermediate_path_noext).tlb $(source)\n", "$(intermediate_dir)$(SEP)", NULL ); @@ -1251,7 +1266,7 @@ "$(intermediate_path_unique).o", "$(intermediate_path_unique).o.d", NULL ); Rule gppHostRule ( "$(source): ${$(module_name)_precondition}\n" - "$(intermediate_path_unique).o: $(source) $(dependencies) | $(intermediate_dir)\n" + "$(intermediate_path_unique).o: $(source) $(dependencies) | $(intermediate_dir)\n" "\t$(ECHO_HOSTCC)\n" "\t${host_gpp} -o $@ $($(module_name)_CXXFLAGS)$(compiler_flags) -c $<\n", "$(intermediate_path_unique).o", NULL ); @@ -1375,6 +1390,7 @@ { HostDontCare, RpcServer, ".idl", &widlServerRule }, { HostDontCare, RpcClient, ".idl", &widlClientRule }, { HostDontCare, RpcProxy, ".idl", &widlProxyRule }, + { HostDontCare, IdlInterface, ".idl", &widlInterfaceRule }, { HostDontCare, EmbeddedTypeLib, ".idl", &widlTlbRule }, { HostDontCare, TypeDontCare, ".idl", &widlHeaderRule }, { HostTrue, TypeDontCare, ".c", &gccHostRule }, Modified: trunk/reactos/tools/rbuild/bootstrap.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/bootstrap.cpp…
============================================================================== --- trunk/reactos/tools/rbuild/bootstrap.cpp [iso-8859-1] (original) +++ trunk/reactos/tools/rbuild/bootstrap.cpp [iso-8859-1] Sun Feb 8 02:54:47 2009 @@ -71,6 +71,7 @@ case RpcProxy: case Alias: case IdlHeader: + case IdlInterface: case MessageHeader: case EmbeddedTypeLib: case ElfExecutable: Modified: trunk/reactos/tools/rbuild/include.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/include.cpp?r…
============================================================================== --- trunk/reactos/tools/rbuild/include.cpp [iso-8859-1] (original) +++ trunk/reactos/tools/rbuild/include.cpp [iso-8859-1] Sun Feb 8 02:54:47 2009 @@ -121,7 +121,8 @@ ( module->type == RpcServer || module->type == RpcClient || module->type == RpcProxy || - module->type == IdlHeader) ) + module->type == IdlHeader || + module->type == IdlInterface) ) return IntermediateDirectory; else return SourceDirectory; Modified: trunk/reactos/tools/rbuild/module.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/module.cpp?re…
============================================================================== --- trunk/reactos/tools/rbuild/module.cpp [iso-8859-1] (original) +++ trunk/reactos/tools/rbuild/module.cpp [iso-8859-1] Sun Feb 8 02:54:47 2009 @@ -941,6 +941,8 @@ return Alias; if ( attribute.value == "idlheader" ) return IdlHeader; + if ( attribute.value == "idlinterface" ) + return IdlInterface; if ( attribute.value == "embeddedtypelib" ) return EmbeddedTypeLib; if ( attribute.value == "elfexecutable" ) @@ -991,6 +993,7 @@ case RpcProxy: case Alias: case IdlHeader: + case IdlInterface: case MessageHeader: return IntermediateDirectory; case TypeDontCare: @@ -1047,6 +1050,7 @@ case RpcServer: case RpcClient: case RpcProxy: + case IdlInterface: return ".o"; case Alias: case ElfExecutable: @@ -1112,6 +1116,7 @@ case Alias: case BootProgram: case IdlHeader: + case IdlInterface: case MessageHeader: case ElfExecutable: case EmbeddedTypeLib: @@ -1164,6 +1169,7 @@ case Alias: case BootProgram: case IdlHeader: + case IdlInterface: case MessageHeader: case EmbeddedTypeLib: case Cabinet: @@ -1220,6 +1226,7 @@ case Alias: case BootProgram: case IdlHeader: + case IdlInterface: case MessageHeader: case EmbeddedTypeLib: case Cabinet: @@ -1276,6 +1283,7 @@ case RpcProxy: case Alias: case IdlHeader: + case IdlInterface: case MessageHeader: case EmbeddedTypeLib: case ElfExecutable: Modified: trunk/reactos/tools/rbuild/rbuild.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/rbuild.h?rev=…
============================================================================== --- trunk/reactos/tools/rbuild/rbuild.h [iso-8859-1] (original) +++ trunk/reactos/tools/rbuild/rbuild.h [iso-8859-1] Sun Feb 8 02:54:47 2009 @@ -298,6 +298,7 @@ BootProgram, Win32SCR, IdlHeader, + IdlInterface, IsoRegTest, LiveIsoRegTest, EmbeddedTypeLib,
15 years, 10 months
1
0
0
0
← Newer
1
...
32
33
34
35
36
37
38
...
56
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Results per page:
10
25
50
100
200