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
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
August 2016
----- 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
20 participants
462 discussions
Start a n
N
ew thread
[akhaldi] 72258: [D3DRM] Sync with Wine Staging 1.9.16. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:36:20 2016 New Revision: 72258 URL:
http://svn.reactos.org/svn/reactos?rev=72258&view=rev
Log: [D3DRM] Sync with Wine Staging 1.9.16. CORE-11866 Modified: trunk/reactos/dll/directx/wine/d3drm/d3drm.c trunk/reactos/dll/directx/wine/d3drm/d3drm_private.h trunk/reactos/dll/directx/wine/d3drm/device.c trunk/reactos/dll/directx/wine/d3drm/frame.c trunk/reactos/dll/directx/wine/d3drm/texture.c trunk/reactos/dll/directx/wine/d3drm/viewport.c trunk/reactos/media/doc/README.WINE [This mail would be too long, it was shortened to contain the URLs only.] Modified: trunk/reactos/dll/directx/wine/d3drm/d3drm.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/d3drm/d3d…
Modified: trunk/reactos/dll/directx/wine/d3drm/d3drm_private.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/d3drm/d3d…
Modified: trunk/reactos/dll/directx/wine/d3drm/device.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/d3drm/dev…
Modified: trunk/reactos/dll/directx/wine/d3drm/frame.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/d3drm/fra…
Modified: trunk/reactos/dll/directx/wine/d3drm/texture.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/d3drm/tex…
Modified: trunk/reactos/dll/directx/wine/d3drm/viewport.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/d3drm/vie…
Modified: trunk/reactos/media/doc/README.WINE URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
8 years, 2 months
1
0
0
0
[akhaldi] 72257: [PSDK] Update d3drmobj.h. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:34:23 2016 New Revision: 72257 URL:
http://svn.reactos.org/svn/reactos?rev=72257&view=rev
Log: [PSDK] Update d3drmobj.h. CORE-11866 Modified: trunk/reactos/sdk/include/psdk/d3drmobj.h Modified: trunk/reactos/sdk/include/psdk/d3drmobj.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/psdk/d3drmobj.…
============================================================================== --- trunk/reactos/sdk/include/psdk/d3drmobj.h [iso-8859-1] (original) +++ trunk/reactos/sdk/include/psdk/d3drmobj.h [iso-8859-1] Thu Aug 18 09:34:23 2016 @@ -855,7 +855,7 @@ #define IDirect3DRMViewport_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMViewport_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMViewport methods ***/ -#define IDirect3DRMViewport_Init(p,a,b,c,d) (p)->lpVtbl->Init(p,a,b,c,d) +#define IDirect3DRMViewport_Init(p,a,b,c,d,e,f) (p)->lpVtbl->Init(p,a,b,c,d,e,f) #define IDirect3DRMViewport_Clear(p) (p)->lpVtbl->Clear(p) #define IDirect3DRMViewport_Render(p,a) (p)->lpVtbl->Render(p,a) #define IDirect3DRMViewport_SetFront(p,a) (p)->lpVtbl->SetFront(p,a) @@ -898,7 +898,7 @@ #define IDirect3DRMViewport_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMViewport_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMViewport methods ***/ -#define IDirect3DRMViewport_Init(p,a,b,c,d) (p)->Init(a,b,c,d) +#define IDirect3DRMViewport_Init(p,a,b,c,d,e,f) (p)->Init(a,b,c,d,e,f) #define IDirect3DRMViewport_Clear(p) (p)->Clear() #define IDirect3DRMViewport_Render(p,a) (p)->Render(a) #define IDirect3DRMViewport_SetFront(p,a) (p)->SetFront(a) @@ -1044,7 +1044,7 @@ #define IDirect3DRMViewport2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMViewport2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMViewport2 methods ***/ -#define IDirect3DRMViewport2_Init(p,a,b,c,d) (p)->Init(a,b,c,d) +#define IDirect3DRMViewport2_Init(p,a,b,c,d,e,f) (p)->Init(a,b,c,d,e,f) #define IDirect3DRMViewport2_Clear(p) (p)->Clear() #define IDirect3DRMViewport2_Render(p,a) (p)->Render(a) #define IDirect3DRMViewport2_SetFront(p,a) (p)->SetFront(a)
8 years, 2 months
1
0
0
0
[akhaldi] 72256: [SECUR32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:33:29 2016 New Revision: 72256 URL:
http://svn.reactos.org/svn/reactos?rev=72256&view=rev
Log: [SECUR32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866 Modified: trunk/rostests/winetests/secur32/CMakeLists.txt trunk/rostests/winetests/secur32/negotiate.c trunk/rostests/winetests/secur32/schannel.c trunk/rostests/winetests/secur32/secur32.c Modified: trunk/rostests/winetests/secur32/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/secur32/CMakeLi…
============================================================================== --- trunk/rostests/winetests/secur32/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/winetests/secur32/CMakeLists.txt [iso-8859-1] Thu Aug 18 09:33:29 2016 @@ -9,5 +9,5 @@ add_executable(secur32_winetest ${SOURCE}) set_module_type(secur32_winetest win32cui) -add_importlibs(secur32_winetest advapi32 ws2_32 msvcrt kernel32) +add_importlibs(secur32_winetest advapi32 ws2_32 crypt32 secur32 msvcrt kernel32) add_cd_file(TARGET secur32_winetest DESTINATION reactos/bin FOR all) Modified: trunk/rostests/winetests/secur32/negotiate.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/secur32/negotia…
============================================================================== --- trunk/rostests/winetests/secur32/negotiate.c [iso-8859-1] (original) +++ trunk/rostests/winetests/secur32/negotiate.c [iso-8859-1] Thu Aug 18 09:33:29 2016 @@ -31,45 +31,6 @@ #include "wine/test.h" -static HMODULE hsecur32; -static SECURITY_STATUS (SEC_ENTRY * pAcceptSecurityContext)(PCredHandle, PCtxtHandle, - PSecBufferDesc, ULONG, ULONG, PCtxtHandle, PSecBufferDesc, PULONG, PTimeStamp); -static SECURITY_STATUS (SEC_ENTRY * pAcquireCredentialsHandleA)(SEC_CHAR *, SEC_CHAR *, - ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID, PCredHandle, PTimeStamp); -static SECURITY_STATUS (SEC_ENTRY * pCompleteAuthToken)(PCtxtHandle, PSecBufferDesc); -static SECURITY_STATUS (SEC_ENTRY * pDecryptMessage)(PCtxtHandle, PSecBufferDesc, ULONG, PULONG); -static SECURITY_STATUS (SEC_ENTRY * pDeleteSecurityContext)(PCtxtHandle); -static SECURITY_STATUS (SEC_ENTRY * pEncryptMessage)(PCtxtHandle, ULONG, PSecBufferDesc, ULONG); -static SECURITY_STATUS (SEC_ENTRY * pFreeContextBuffer)(PVOID); -static SECURITY_STATUS (SEC_ENTRY * pFreeCredentialsHandle)(PCredHandle); -static SECURITY_STATUS (SEC_ENTRY * pInitializeSecurityContextA)(PCredHandle, PCtxtHandle, - SEC_CHAR *, ULONG, ULONG, ULONG, PSecBufferDesc, ULONG, PCtxtHandle, PSecBufferDesc, - PULONG, PTimeStamp); -static PSecurityFunctionTableA (SEC_ENTRY * pInitSecurityInterfaceA)(void); -static SECURITY_STATUS (SEC_ENTRY * pMakeSignature)(PCtxtHandle, ULONG, PSecBufferDesc, ULONG); -static SECURITY_STATUS (SEC_ENTRY * pQueryContextAttributesA)(PCtxtHandle, ULONG, PVOID); -static SECURITY_STATUS (SEC_ENTRY * pQuerySecurityPackageInfoA)(SEC_CHAR *, PSecPkgInfoA *); -static SECURITY_STATUS (SEC_ENTRY * pVerifySignature)(PCtxtHandle, PSecBufferDesc, ULONG, PULONG); - -static void init_function_ptrs(void) -{ - if (!(hsecur32 = LoadLibraryA("secur32.dll"))) return; - pAcceptSecurityContext = (void *)GetProcAddress(hsecur32, "AcceptSecurityContext"); - pAcquireCredentialsHandleA = (void *)GetProcAddress(hsecur32, "AcquireCredentialsHandleA"); - pCompleteAuthToken = (void *)GetProcAddress(hsecur32, "CompleteAuthToken"); - pDecryptMessage = (void *)GetProcAddress(hsecur32, "DecryptMessage"); - pDeleteSecurityContext = (void *)GetProcAddress(hsecur32, "DeleteSecurityContext"); - pEncryptMessage = (void *)GetProcAddress(hsecur32, "EncryptMessage"); - pFreeContextBuffer = (void *)GetProcAddress(hsecur32, "FreeContextBuffer"); - pFreeCredentialsHandle = (void *)GetProcAddress(hsecur32, "FreeCredentialsHandle"); - pInitializeSecurityContextA = (void *)GetProcAddress(hsecur32, "InitializeSecurityContextA"); - pInitSecurityInterfaceA = (void *)GetProcAddress(hsecur32, "InitSecurityInterfaceA"); - pMakeSignature = (void *)GetProcAddress(hsecur32, "MakeSignature"); - pQueryContextAttributesA = (void *)GetProcAddress(hsecur32, "QueryContextAttributesA"); - pQuerySecurityPackageInfoA = (void *)GetProcAddress(hsecur32, "QuerySecurityPackageInfoA"); - pVerifySignature = (void *)GetProcAddress(hsecur32, "VerifySignature"); -} - #define NEGOTIATE_BASE_CAPS ( \ SECPKG_FLAG_INTEGRITY | \ SECPKG_FLAG_PRIVACY | \ @@ -158,14 +119,14 @@ trace( "setting up client\n" ); - ret = pQuerySecurityPackageInfoA( provider, &info ); + ret = QuerySecurityPackageInfoA( provider, &info ); ok( ret == SEC_E_OK, "QuerySecurityPackageInfo returned %08x\n", ret ); setup_buffers( data, info ); - pFreeContextBuffer( info ); - - ret = pAcquireCredentialsHandleA( NULL, provider, SECPKG_CRED_OUTBOUND, NULL, - data->id, NULL, NULL, &data->cred, &ttl ); + FreeContextBuffer( info ); + + ret = AcquireCredentialsHandleA( NULL, provider, SECPKG_CRED_OUTBOUND, NULL, + data->id, NULL, NULL, &data->cred, &ttl ); ok( ret == SEC_E_OK, "AcquireCredentialsHandleA returned %08x\n", ret ); return ret; } @@ -178,14 +139,14 @@ trace( "setting up server\n" ); - ret = pQuerySecurityPackageInfoA( provider, &info ); + ret = QuerySecurityPackageInfoA( provider, &info ); ok( ret == SEC_E_OK, "QuerySecurityPackageInfo returned %08x\n", ret ); setup_buffers( data, info ); - pFreeContextBuffer( info ); - - ret = pAcquireCredentialsHandleA( NULL, provider, SECPKG_CRED_INBOUND, NULL, - NULL, NULL, NULL, &data->cred, &ttl ); + FreeContextBuffer( info ); + + ret = AcquireCredentialsHandleA( NULL, provider, SECPKG_CRED_INBOUND, NULL, + NULL, NULL, NULL, &data->cred, &ttl ); ok( ret == SEC_E_OK, "AcquireCredentialsHandleA returned %08x\n", ret ); return ret; } @@ -201,12 +162,12 @@ data->out_buf->pBuffers[0].cbBuffer = data->max_token; data->out_buf->pBuffers[0].BufferType = SECBUFFER_TOKEN; - ret = pInitializeSecurityContextA( first ? &data->cred : NULL, first ? NULL : &data->ctxt, - NULL, 0, 0, SECURITY_NETWORK_DREP, first ? NULL : data->in_buf, - 0, &data->ctxt, data->out_buf, &attr, &ttl ); + ret = InitializeSecurityContextA( first ? &data->cred : NULL, first ? NULL : &data->ctxt, + NULL, 0, 0, SECURITY_NETWORK_DREP, first ? NULL : data->in_buf, + 0, &data->ctxt, data->out_buf, &attr, &ttl ); if (ret == SEC_I_COMPLETE_AND_CONTINUE || ret == SEC_I_COMPLETE_NEEDED) { - pCompleteAuthToken( &data->ctxt, data->out_buf ); + CompleteAuthToken( &data->ctxt, data->out_buf ); if (ret == SEC_I_COMPLETE_AND_CONTINUE) ret = SEC_I_CONTINUE_NEEDED; else if (ret == SEC_I_COMPLETE_NEEDED) @@ -227,12 +188,12 @@ trace( "running server for the %s time\n", first ? "first" : "second" ); - ret = pAcceptSecurityContext( &data->cred, first ? NULL : &data->ctxt, - data->in_buf, 0, SECURITY_NETWORK_DREP, - &data->ctxt, data->out_buf, &attr, &ttl ); + ret = AcceptSecurityContext( &data->cred, first ? NULL : &data->ctxt, + data->in_buf, 0, SECURITY_NETWORK_DREP, + &data->ctxt, data->out_buf, &attr, &ttl ); if (ret == SEC_I_COMPLETE_AND_CONTINUE || ret == SEC_I_COMPLETE_NEEDED) { - pCompleteAuthToken( &data->ctxt, data->out_buf ); + CompleteAuthToken( &data->ctxt, data->out_buf ); if (ret == SEC_I_COMPLETE_AND_CONTINUE) ret = SEC_I_CONTINUE_NEEDED; else if (ret == SEC_I_COMPLETE_NEEDED) @@ -282,7 +243,7 @@ if ((status = setup_server( &server, (SEC_CHAR *)"Negotiate" ))) { skip( "setup_server returned %08x, skipping test\n", status ); - pFreeCredentialsHandle( &client.cred ); + FreeCredentialsHandle( &client.cred ); return; } @@ -313,7 +274,7 @@ sizes.cbMaxSignature = 0xdeadbeef; sizes.cbSecurityTrailer = 0xdeadbeef; sizes.cbBlockSize = 0xdeadbeef; - status_c = pQueryContextAttributesA( &client.ctxt, SECPKG_ATTR_SIZES, &sizes ); + status_c = QueryContextAttributesA( &client.ctxt, SECPKG_ATTR_SIZES, &sizes ); ok( status_c == SEC_E_OK, "pQueryContextAttributesA returned %08x\n", status_c ); ok( sizes.cbMaxToken == 2888 || sizes.cbMaxToken == 1904, "expected 2888 or 1904, got %u\n", sizes.cbMaxToken ); @@ -322,7 +283,7 @@ ok( !sizes.cbBlockSize, "expected 0, got %u\n", sizes.cbBlockSize ); memset( &info, 0, sizeof(info) ); - status_c = pQueryContextAttributesA( &client.ctxt, SECPKG_ATTR_NEGOTIATION_INFO, &info ); + status_c = QueryContextAttributesA( &client.ctxt, SECPKG_ATTR_NEGOTIATION_INFO, &info ); ok( status_c == SEC_E_OK, "pQueryContextAttributesA returned %08x\n", status_c ); pi = info.PackageInfo; @@ -347,25 +308,25 @@ if (client.ctxt.dwLower || client.ctxt.dwUpper) { - status_c = pDeleteSecurityContext( &client.ctxt ); + status_c = DeleteSecurityContext( &client.ctxt ); ok( status_c == SEC_E_OK, "DeleteSecurityContext returned %08x\n", status_c ); } if (server.ctxt.dwLower || server.ctxt.dwUpper) { - status_s = pDeleteSecurityContext( &server.ctxt ); + status_s = DeleteSecurityContext( &server.ctxt ); ok( status_s == SEC_E_OK, "DeleteSecurityContext returned %08x\n", status_s ); } if (client.cred.dwLower || client.cred.dwUpper) { - status_c = pFreeCredentialsHandle( &client.cred ); + status_c = FreeCredentialsHandle( &client.cred ); ok( status_c == SEC_E_OK, "FreeCredentialsHandle returned %08x\n", status_c ); } if (server.cred.dwLower || server.cred.dwUpper) { - status_s = pFreeCredentialsHandle(&server.cred); + status_s = FreeCredentialsHandle(&server.cred); ok( status_s == SEC_E_OK, "FreeCredentialsHandle returned %08x\n", status_s ); } } @@ -374,15 +335,7 @@ { SecPkgInfoA *info; - init_function_ptrs(); - - if (!pFreeCredentialsHandle || !pAcquireCredentialsHandleA || !pQuerySecurityPackageInfoA || - !pFreeContextBuffer) - { - win_skip("functions are not available\n"); - return; - } - if (pQuerySecurityPackageInfoA( (SEC_CHAR *)"Negotiate", &info )) + if (QuerySecurityPackageInfoA( (SEC_CHAR *)"Negotiate", &info )) { ok( 0, "Negotiate package not installed, skipping test\n" ); return; @@ -396,7 +349,7 @@ ok( info->wVersion == 1, "got %u\n", info->wVersion ); ok( info->wRPCID == RPC_C_AUTHN_GSS_NEGOTIATE, "got %u\n", info->wRPCID ); ok( !lstrcmpA( info->Name, "Negotiate" ), "got %s\n", info->Name ); - pFreeContextBuffer( info ); + FreeContextBuffer( info ); test_authentication(); } Modified: trunk/rostests/winetests/secur32/schannel.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/secur32/schanne…
============================================================================== --- trunk/rostests/winetests/secur32/schannel.c [iso-8859-1] (original) +++ trunk/rostests/winetests/secur32/schannel.c [iso-8859-1] Thu Aug 18 09:33:29 2016 @@ -29,7 +29,7 @@ #include "wine/test.h" -static HMODULE secdll, crypt32dll; +static HMODULE secdll; static ACQUIRE_CREDENTIALS_HANDLE_FN_A pAcquireCredentialsHandleA; static ENUMERATE_SECURITY_PACKAGES_FN_A pEnumerateSecurityPackagesA; @@ -41,16 +41,6 @@ static DELETE_SECURITY_CONTEXT_FN pDeleteSecurityContext; static DECRYPT_MESSAGE_FN pDecryptMessage; static ENCRYPT_MESSAGE_FN pEncryptMessage; - -static PCCERT_CONTEXT (WINAPI *pCertCreateCertificateContext)(DWORD,const BYTE*,DWORD); -static BOOL (WINAPI *pCertFreeCertificateContext)(PCCERT_CONTEXT); -static BOOL (WINAPI *pCertSetCertificateContextProperty)(PCCERT_CONTEXT,DWORD,DWORD,const void*); -static PCCERT_CONTEXT (WINAPI *pCertEnumCertificatesInStore)(HCERTSTORE,PCCERT_CONTEXT); - -static BOOL (WINAPI *pCryptAcquireContextW)(HCRYPTPROV*, LPCWSTR, LPCWSTR, DWORD, DWORD); -static BOOL (WINAPI *pCryptDestroyKey)(HCRYPTKEY); -static BOOL (WINAPI *pCryptImportKey)(HCRYPTPROV,const BYTE*,DWORD,HCRYPTKEY,DWORD,HCRYPTKEY*); -static BOOL (WINAPI *pCryptReleaseContext)(HCRYPTPROV,ULONG_PTR); static const BYTE bigCert[] = { 0x30, 0x7a, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06, 0x00, 0x30, 0x15, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, @@ -119,13 +109,9 @@ static void InitFunctionPtrs(void) { - HMODULE advapi32dll; - - crypt32dll = LoadLibraryA("crypt32.dll"); secdll = LoadLibraryA("secur32.dll"); if(!secdll) secdll = LoadLibraryA("security.dll"); - advapi32dll = LoadLibraryA("advapi32.dll"); #define GET_PROC(h, func) p ## func = (void*)GetProcAddress(h, #func) @@ -142,16 +128,6 @@ GET_PROC(secdll, DecryptMessage); GET_PROC(secdll, EncryptMessage); } - - GET_PROC(advapi32dll, CryptAcquireContextW); - GET_PROC(advapi32dll, CryptDestroyKey); - GET_PROC(advapi32dll, CryptImportKey); - GET_PROC(advapi32dll, CryptReleaseContext); - - GET_PROC(crypt32dll, CertFreeCertificateContext); - GET_PROC(crypt32dll, CertSetCertificateContextProperty); - GET_PROC(crypt32dll, CertCreateCertificateContext); - GET_PROC(crypt32dll, CertEnumCertificatesInStore); #undef GET_PROC } @@ -336,9 +312,9 @@ HCRYPTKEY key; CRYPT_KEY_PROV_INFO keyProvInfo; - if (!pAcquireCredentialsHandleA || !pCertCreateCertificateContext || + if (!pAcquireCredentialsHandleA || !pEnumerateSecurityPackagesA || !pFreeContextBuffer || - !pFreeCredentialsHandle || !pCryptAcquireContextW) + !pFreeCredentialsHandle) { win_skip("Needed functions are not available\n"); return; @@ -372,13 +348,11 @@ keyProvInfo.rgProvParam = NULL; keyProvInfo.dwKeySpec = AT_SIGNATURE; - certs[0] = pCertCreateCertificateContext(X509_ASN_ENCODING, bigCert, - sizeof(bigCert)); - certs[1] = pCertCreateCertificateContext(X509_ASN_ENCODING, selfSignedCert, - sizeof(selfSignedCert)); + certs[0] = CertCreateCertificateContext(X509_ASN_ENCODING, bigCert, sizeof(bigCert)); + certs[1] = CertCreateCertificateContext(X509_ASN_ENCODING, selfSignedCert, sizeof(selfSignedCert)); SetLastError(0xdeadbeef); - ret = pCryptAcquireContextW(&csp, cspNameW, MS_DEF_PROV_W, PROV_RSA_FULL, + ret = CryptAcquireContextW(&csp, cspNameW, MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_DELETEKEYSET); if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) { @@ -497,31 +471,26 @@ "or SEC_E_INTERNAL_ERROR, got %08x\n", st); /* Good cert, with CRYPT_KEY_PROV_INFO set before it's had a key loaded. */ - if (pCertSetCertificateContextProperty) - { - ret = pCertSetCertificateContextProperty(certs[1], - CERT_KEY_PROV_INFO_PROP_ID, 0, &keyProvInfo); - schanCred.dwVersion = SCH_CRED_V3; - ok(ret, "CertSetCertificateContextProperty failed: %08x\n", GetLastError()); - st = pAcquireCredentialsHandleA(NULL, unisp_name_a, SECPKG_CRED_OUTBOUND, - NULL, &schanCred, NULL, NULL, &cred, NULL); - ok(st == SEC_E_UNKNOWN_CREDENTIALS || st == SEC_E_INTERNAL_ERROR /* WinNT */, - "Expected SEC_E_UNKNOWN_CREDENTIALS or SEC_E_INTERNAL_ERROR, got %08x\n", st); - st = pAcquireCredentialsHandleA(NULL, unisp_name_a, SECPKG_CRED_INBOUND, - NULL, &schanCred, NULL, NULL, &cred, NULL); - ok(st == SEC_E_UNKNOWN_CREDENTIALS || st == SEC_E_INTERNAL_ERROR /* WinNT */, - "Expected SEC_E_UNKNOWN_CREDENTIALS or SEC_E_INTERNAL_ERROR, got %08x\n", st); - } - - ret = pCryptAcquireContextW(&csp, cspNameW, MS_DEF_PROV_W, PROV_RSA_FULL, + ret = CertSetCertificateContextProperty(certs[1], + CERT_KEY_PROV_INFO_PROP_ID, 0, &keyProvInfo); + schanCred.dwVersion = SCH_CRED_V3; + ok(ret, "CertSetCertificateContextProperty failed: %08x\n", GetLastError()); + st = pAcquireCredentialsHandleA(NULL, unisp_name_a, SECPKG_CRED_OUTBOUND, + NULL, &schanCred, NULL, NULL, &cred, NULL); + ok(st == SEC_E_UNKNOWN_CREDENTIALS || st == SEC_E_INTERNAL_ERROR /* WinNT */, + "Expected SEC_E_UNKNOWN_CREDENTIALS or SEC_E_INTERNAL_ERROR, got %08x\n", st); + st = pAcquireCredentialsHandleA(NULL, unisp_name_a, SECPKG_CRED_INBOUND, + NULL, &schanCred, NULL, NULL, &cred, NULL); + ok(st == SEC_E_UNKNOWN_CREDENTIALS || st == SEC_E_INTERNAL_ERROR /* WinNT */, + "Expected SEC_E_UNKNOWN_CREDENTIALS or SEC_E_INTERNAL_ERROR, got %08x\n", st); + + ret = CryptAcquireContextW(&csp, cspNameW, MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_NEWKEYSET); ok(ret, "CryptAcquireContextW failed: %08x\n", GetLastError()); ret = 0; - if (pCryptImportKey) - { - ret = pCryptImportKey(csp, privKey, sizeof(privKey), 0, 0, &key); - ok(ret, "CryptImportKey failed: %08x\n", GetLastError()); - } + + ret = CryptImportKey(csp, privKey, sizeof(privKey), 0, 0, &key); + ok(ret, "CryptImportKey failed: %08x\n", GetLastError()); if (ret) { PCCERT_CONTEXT tmp; @@ -610,20 +579,14 @@ "Expected SEC_E_UNKNOWN_CREDENTIALS, got %08x\n", st); /* FIXME: what about two valid certs? */ - if (pCryptDestroyKey) - pCryptDestroyKey(key); - } - - if (pCryptReleaseContext) - pCryptReleaseContext(csp, 0); - pCryptAcquireContextW(&csp, cspNameW, MS_DEF_PROV_W, PROV_RSA_FULL, - CRYPT_DELETEKEYSET); - - if (pCertFreeCertificateContext) - { - pCertFreeCertificateContext(certs[0]); - pCertFreeCertificateContext(certs[1]); - } + CryptDestroyKey(key); + } + + CryptReleaseContext(csp, 0); + CryptAcquireContextW(&csp, cspNameW, MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_DELETEKEYSET); + + CertFreeCertificateContext(certs[0]); + CertFreeCertificateContext(certs[1]); } static void test_remote_cert(PCCERT_CONTEXT remote_cert) @@ -634,7 +597,7 @@ ok(remote_cert->hCertStore != NULL, "hCertStore == NULL\n"); - while((iter = pCertEnumCertificatesInStore(remote_cert->hCertStore, iter))) { + while((iter = CertEnumCertificatesInStore(remote_cert->hCertStore, iter))) { if(iter == remote_cert) incl_remote = TRUE; cert_cnt++; @@ -927,7 +890,7 @@ ok(status == SEC_E_OK, "QueryContextAttributesW(SECPKG_ATTR_REMOTE_CERT_CONTEXT) failed: %08x\n", status); if(status == SEC_E_OK) { test_remote_cert(cert); - pCertFreeCertificateContext(cert); + CertFreeCertificateContext(cert); } status = pQueryContextAttributesA(&context, SECPKG_ATTR_CONNECTION_INFO, (void*)&conn_info); @@ -1032,6 +995,4 @@ if(secdll) FreeLibrary(secdll); - if(crypt32dll) - FreeLibrary(crypt32dll); -} +} Modified: trunk/rostests/winetests/secur32/secur32.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/secur32/secur32…
============================================================================== --- trunk/rostests/winetests/secur32/secur32.c [iso-8859-1] (original) +++ trunk/rostests/winetests/secur32/secur32.c [iso-8859-1] Thu Aug 18 09:33:29 2016 @@ -315,6 +315,55 @@ pSspiFreeAuthIdentity( id ); } +static void test_kerberos(void) +{ + SecPkgInfoA *info; + TimeStamp ttl; + CredHandle cred; + SECURITY_STATUS status; + + SEC_CHAR provider[] = {'K','e','r','b','e','r','o','s',0}; + + static const ULONG expected_flags = + SECPKG_FLAG_INTEGRITY + | SECPKG_FLAG_PRIVACY + | SECPKG_FLAG_TOKEN_ONLY + | SECPKG_FLAG_DATAGRAM + | SECPKG_FLAG_CONNECTION + | SECPKG_FLAG_MULTI_REQUIRED + | SECPKG_FLAG_EXTENDED_ERROR + | SECPKG_FLAG_IMPERSONATION + | SECPKG_FLAG_ACCEPT_WIN32_NAME + | SECPKG_FLAG_NEGOTIABLE + | SECPKG_FLAG_GSS_COMPATIBLE + | SECPKG_FLAG_LOGON + | SECPKG_FLAG_MUTUAL_AUTH + | SECPKG_FLAG_DELEGATION + | SECPKG_FLAG_READONLY_WITH_CHECKSUM; + static const ULONG optional_mask = + SECPKG_FLAG_RESTRICTED_TOKENS + | SECPKG_FLAG_APPCONTAINER_CHECKS; + + status = QuerySecurityPackageInfoA(provider, &info); + ok(status == SEC_E_OK, "Kerberos package not installed, skipping test\n"); + if(status != SEC_E_OK) + return; + + ok( (info->fCapabilities & ~optional_mask) == expected_flags, "got %08x, expected %08x\n", info->fCapabilities, expected_flags ); + ok( info->wVersion == 1, "got %u\n", info->wVersion ); + ok( info->wRPCID == RPC_C_AUTHN_GSS_KERBEROS, "got %u\n", info->wRPCID ); + ok( info->cbMaxToken >= 12000, "got %u\n", info->cbMaxToken ); + ok( !lstrcmpA( info->Name, "Kerberos" ), "got %s\n", info->Name ); + ok( !lstrcmpA( info->Comment, "Microsoft Kerberos V1.0" ), "got %s\n", info->Comment ); + FreeContextBuffer( info ); + + status = AcquireCredentialsHandleA( NULL, provider, SECPKG_CRED_OUTBOUND, NULL, + NULL, NULL, NULL, &cred, &ttl ); + todo_wine ok( status == SEC_E_OK, "AcquireCredentialsHandleA returned %08x\n", status ); + if(status == SEC_E_OK) + FreeCredentialHandle( &cred ); +} + START_TEST(secur32) { secdll = LoadLibraryA("secur32.dll"); @@ -361,4 +410,6 @@ FreeLibrary(secdll); } -} + + test_kerberos(); +}
8 years, 2 months
1
0
0
0
[akhaldi] 72255: [WS2_32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:29:06 2016 New Revision: 72255 URL:
http://svn.reactos.org/svn/reactos?rev=72255&view=rev
Log: [WS2_32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866 Modified: trunk/rostests/winetests/ws2_32/sock.c Modified: trunk/rostests/winetests/ws2_32/sock.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ws2_32/sock.c?r…
============================================================================== --- trunk/rostests/winetests/ws2_32/sock.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ws2_32/sock.c [iso-8859-1] Thu Aug 18 09:29:06 2016 @@ -74,6 +74,7 @@ static void (WINAPI *pFreeAddrInfoW)(PADDRINFOW); static int (WINAPI *pGetAddrInfoW)(LPCWSTR,LPCWSTR,const ADDRINFOW *,PADDRINFOW *); static PCSTR (WINAPI *pInetNtop)(INT,LPVOID,LPSTR,ULONG); +static PCWSTR(WINAPI *pInetNtopW)(INT,LPVOID,LPWSTR,ULONG); static int (WINAPI *pInetPtonA)(INT,LPCSTR,LPVOID); static int (WINAPI *pInetPtonW)(INT,LPWSTR,LPVOID); static int (WINAPI *pWSALookupServiceBeginW)(LPWSAQUERYSETW,DWORD,LPHANDLE); @@ -1230,6 +1231,7 @@ pFreeAddrInfoW = (void *)GetProcAddress(hws2_32, "FreeAddrInfoW"); pGetAddrInfoW = (void *)GetProcAddress(hws2_32, "GetAddrInfoW"); pInetNtop = (void *)GetProcAddress(hws2_32, "inet_ntop"); + pInetNtopW = (void *)GetProcAddress(hws2_32, "InetNtopW"); pInetPtonA = (void *)GetProcAddress(hws2_32, "inet_pton"); pInetPtonW = (void *)GetProcAddress(hws2_32, "InetPtonW"); pWSALookupServiceBeginW = (void *)GetProcAddress(hws2_32, "WSALookupServiceBeginW"); @@ -4889,11 +4891,12 @@ int i, ret; DWORD err; char buffer[64],str[64]; - WCHAR printableW[64]; + WCHAR printableW[64], collapsedW[64]; const char *ptr; + const WCHAR *ptrW; /* InetNtop and InetPton became available in Vista and Win2008 */ - if (!pInetNtop || !pInetPtonA || !pInetPtonW) + if (!pInetNtop || !pInetNtopW || !pInetPtonA || !pInetPtonW) { win_skip("InetNtop and/or InetPton not present, not executing tests\n"); return; @@ -4941,6 +4944,18 @@ ok(memcmp(buffer, tests[i].raw_data, tests[i].family == AF_INET ? sizeof(struct in_addr) : sizeof(struct in6_addr)) == 0, "Test [%d]: Expected binary data differs\n", i); + + /* Test the result from Pton with Ntop */ + printableW[0] = 0xdead; + ptrW = pInetNtopW(tests[i].family, buffer, printableW, sizeof(printableW) / sizeof(printableW[0])); + ok (ptrW != NULL, "Test [%d]: Failed with NULL\n", i); + ok (ptrW == printableW, "Test [%d]: Pointers differ (%p != %p)\n", i, ptrW, printableW); + if (!ptrW) continue; + + MultiByteToWideChar(CP_ACP, 0, tests[i].collapsed, -1, collapsedW, + sizeof(collapsedW) / sizeof(collapsedW[0])); + ok (lstrcmpW(ptrW, collapsedW) == 0, "Test [%d]: Expected '%s', got '%s'\n", + i, tests[i].collapsed, wine_dbgstr_w(ptrW)); } }
8 years, 2 months
1
0
0
0
[akhaldi] 72254: [USER32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:26:41 2016 New Revision: 72254 URL:
http://svn.reactos.org/svn/reactos?rev=72254&view=rev
Log: [USER32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866 Modified: trunk/rostests/winetests/user32/input.c trunk/rostests/winetests/user32/menu.c trunk/rostests/winetests/user32/msg.c Modified: trunk/rostests/winetests/user32/input.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/input.c?…
============================================================================== --- trunk/rostests/winetests/user32/input.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/input.c [iso-8859-1] Thu Aug 18 09:26:41 2016 @@ -184,7 +184,7 @@ if( TrackSysKey == VK_MENU || /* <ALT>-down/<ALT>-up sequence */ (VKey != VK_MENU)) /* <ALT>-down...<something else>-up */ message = WM_SYSKEYUP; - TrackSysKey = 0; + TrackSysKey = 0; /* FIXME */ } InputKeyStateTable[VKey] &= ~0x80; flags |= KF_REPEAT | KF_UP; @@ -1768,7 +1768,9 @@ char klid[KL_NAMELENGTH]; if (0) /* crashes on native system */ +{ ret = GetKeyboardLayoutNameA(NULL); +} SetLastError(0xdeadbeef); ret = GetKeyboardLayoutNameW(NULL); Modified: trunk/rostests/winetests/user32/menu.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/menu.c?r…
============================================================================== --- trunk/rostests/winetests/user32/menu.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/menu.c [iso-8859-1] Thu Aug 18 09:26:41 2016 @@ -3973,12 +3973,16 @@ ret = InsertMenuItemA(hmenu, 0, TRUE, &mii); ok(ret, "InsertMenuItem failed\n"); if (0) /* FIXME: uncomment once Wine is fixed */ +{ check_menu_items(hmenu, 206, MF_SEPARATOR, MFS_GRAYED); +} mii.wID = 207; ret = SetMenuItemInfoA(hmenu, 0, TRUE, &mii); ok(ret, "SetMenuItemInfo failed\n"); if (0) /* FIXME: uncomment once Wine is fixed */ +{ check_menu_items(hmenu, 207, MF_SEPARATOR, MFS_GRAYED); +} DestroyMenu(hmenu); hbmp = CreateBitmap(1, 1, 1, 1, NULL); Modified: trunk/rostests/winetests/user32/msg.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/msg.c?re…
============================================================================== --- trunk/rostests/winetests/user32/msg.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/msg.c [iso-8859-1] Thu Aug 18 09:26:41 2016 @@ -12190,11 +12190,7 @@ "expected %d,%d got %d,%d\n", sw[i].wp_min.x, sw[i].wp_min.y, wp.ptMinPosition.x, wp.ptMinPosition.y); } - if (wp.ptMaxPosition.x != sw[i].wp_max.x || wp.ptMaxPosition.y != sw[i].wp_max.y) - todo_wine - ok(wp.ptMaxPosition.x == sw[i].wp_max.x && wp.ptMaxPosition.y == sw[i].wp_max.y, - "expected %d,%d got %d,%d\n", sw[i].wp_max.x, sw[i].wp_max.y, wp.ptMaxPosition.x, wp.ptMaxPosition.y); - else + todo_wine_if(wp.ptMaxPosition.x != sw[i].wp_max.x || wp.ptMaxPosition.y != sw[i].wp_max.y) ok(wp.ptMaxPosition.x == sw[i].wp_max.x && wp.ptMaxPosition.y == sw[i].wp_max.y, "expected %d,%d got %d,%d\n", sw[i].wp_max.x, sw[i].wp_max.y, wp.ptMaxPosition.x, wp.ptMaxPosition.y);
8 years, 2 months
1
0
0
0
[akhaldi] 72253: [KERNEL32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:22:13 2016 New Revision: 72253 URL:
http://svn.reactos.org/svn/reactos?rev=72253&view=rev
Log: [KERNEL32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866 Modified: trunk/rostests/winetests/kernel32/debugger.c trunk/rostests/winetests/kernel32/fiber.c trunk/rostests/winetests/kernel32/loader.c trunk/rostests/winetests/kernel32/process.c trunk/rostests/winetests/kernel32/thread.c trunk/rostests/winetests/kernel32/virtual.c Modified: trunk/rostests/winetests/kernel32/debugger.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/debugg…
============================================================================== --- trunk/rostests/winetests/kernel32/debugger.c [iso-8859-1] (original) +++ trunk/rostests/winetests/kernel32/debugger.c [iso-8859-1] Thu Aug 18 09:22:13 2016 @@ -39,7 +39,6 @@ static BOOL (WINAPI *pDebugActiveProcessStop)(DWORD); static BOOL (WINAPI *pDebugSetProcessKillOnExit)(BOOL); static BOOL (WINAPI *pIsDebuggerPresent)(void); -static struct _TEB * (WINAPI *pNtCurrentTeb)(void); static LONG child_failures; @@ -579,18 +578,15 @@ child_ok(ret, "CheckRemoteDebuggerPresent failed, last error %#x.\n", GetLastError()); child_ok(debug, "Expected debug != 0, got %#x.\n", debug); - if (pNtCurrentTeb) - { - pNtCurrentTeb()->Peb->BeingDebugged = FALSE; - - ret = pIsDebuggerPresent(); - child_ok(!ret, "Expected ret != 0, got %#x.\n", ret); - ret = pCheckRemoteDebuggerPresent(GetCurrentProcess(), &debug); - child_ok(ret, "CheckRemoteDebuggerPresent failed, last error %#x.\n", GetLastError()); - child_ok(debug, "Expected debug != 0, got %#x.\n", debug); - - pNtCurrentTeb()->Peb->BeingDebugged = TRUE; - } + NtCurrentTeb()->Peb->BeingDebugged = FALSE; + + ret = pIsDebuggerPresent(); + child_ok(!ret, "Expected ret != 0, got %#x.\n", ret); + ret = pCheckRemoteDebuggerPresent(GetCurrentProcess(), &debug); + child_ok(ret, "CheckRemoteDebuggerPresent failed, last error %#x.\n", GetLastError()); + child_ok(debug, "Expected debug != 0, got %#x.\n", debug); + + NtCurrentTeb()->Peb->BeingDebugged = TRUE; blackbox.failures = child_failures; save_blackbox(blackbox_file, &blackbox, sizeof(blackbox)); @@ -815,8 +811,6 @@ pDebugActiveProcessStop=(void*)GetProcAddress(hdll, "DebugActiveProcessStop"); pDebugSetProcessKillOnExit=(void*)GetProcAddress(hdll, "DebugSetProcessKillOnExit"); pIsDebuggerPresent=(void*)GetProcAddress(hdll, "IsDebuggerPresent"); - hdll=GetModuleHandleA("ntdll.dll"); - if (hdll) pNtCurrentTeb = (void*)GetProcAddress(hdll, "NtCurrentTeb"); myARGC=winetest_get_mainargs(&myARGV); if (myARGC >= 3 && strcmp(myARGV[2], "crash") == 0) Modified: trunk/rostests/winetests/kernel32/fiber.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/fiber.…
============================================================================== --- trunk/rostests/winetests/kernel32/fiber.c [iso-8859-1] (original) +++ trunk/rostests/winetests/kernel32/fiber.c [iso-8859-1] Thu Aug 18 09:22:13 2016 @@ -33,9 +33,13 @@ static PVOID (WINAPI *pFlsGetValue)(DWORD); static BOOL (WINAPI *pFlsSetValue)(DWORD,PVOID); -static LPVOID fibers[2]; +static void *fibers[3]; static BYTE testparam = 185; -static WORD cbCount; +static DWORD fls_index_to_set = FLS_OUT_OF_INDEXES; +static void* fls_value_to_set; + +static int fiberCount = 0; +static int cbCount = 0; static VOID init_funcs(void) { @@ -59,15 +63,35 @@ static VOID WINAPI FiberLocalStorageProc(PVOID lpFlsData) { + ok(lpFlsData == fls_value_to_set, + "FlsData expected not to be changed, value is %p, expected %p\n", + lpFlsData, fls_value_to_set); cbCount++; - ok(lpFlsData == (PVOID) 1587, "FlsData expected not to be changed\n"); } static VOID WINAPI FiberMainProc(LPVOID lpFiberParameter) { BYTE *tparam = (BYTE *)lpFiberParameter; - cbCount++; + fiberCount++; ok(*tparam == 185, "Parameterdata expected not to be changed\n"); + if (fls_index_to_set != FLS_OUT_OF_INDEXES) + { + void* ret; + BOOL bret; + + ret = pFlsGetValue(fls_index_to_set); + ok(ret == NULL, "FlsGetValue returned %p, expected NULL\n", ret); + + /* Set the FLS value */ + bret = pFlsSetValue(fls_index_to_set, fls_value_to_set); + ok(bret, "FlsSetValue failed with error %u\n", GetLastError()); + + /* Verify that FlsGetValue retrieves the value set by FlsSetValue */ + SetLastError( 0xdeadbeef ); + ret = pFlsGetValue(fls_index_to_set); + ok(ret == fls_value_to_set, "FlsGetValue returned %p, expected %p\n", ret, fls_value_to_set); + ok(GetLastError() == ERROR_SUCCESS, "FlsGetValue error %u\n", GetLastError()); + } pSwitchToFiber(fibers[0]); } @@ -76,7 +100,7 @@ if (pConvertThreadToFiber) { fibers[0] = pConvertThreadToFiber(&testparam); - ok(fibers[0] != 0, "ConvertThreadToFiber failed with error %d\n", GetLastError()); + ok(fibers[0] != NULL, "ConvertThreadToFiber failed with error %u\n", GetLastError()); } else { @@ -89,7 +113,7 @@ if (pConvertThreadToFiberEx) { fibers[0] = pConvertThreadToFiberEx(&testparam, 0); - ok(fibers[0] != 0, "ConvertThreadToFiberEx failed with error %d\n", GetLastError()); + ok(fibers[0] != NULL, "ConvertThreadToFiberEx failed with error %u\n", GetLastError()); } else { @@ -102,7 +126,7 @@ if (pConvertFiberToThread) { BOOL ret = pConvertFiberToThread(); - ok(ret, "ConvertFiberToThread failed with error %d\n", GetLastError()); + ok(ret, "ConvertFiberToThread failed with error %u\n", GetLastError()); } else { @@ -112,9 +136,9 @@ static void test_FiberHandling(void) { - cbCount = 0; + fiberCount = 0; fibers[0] = pCreateFiber(0,FiberMainProc,&testparam); - ok(fibers[0] != 0, "CreateFiber failed with error %d\n", GetLastError()); + ok(fibers[0] != NULL, "CreateFiber failed with error %u\n", GetLastError()); pDeleteFiber(fibers[0]); test_ConvertThreadToFiber(); @@ -124,12 +148,11 @@ else test_ConvertThreadToFiber(); - fibers[1] = pCreateFiber(0,FiberMainProc,&testparam); - ok(fibers[1] != 0, "CreateFiber failed with error %d\n", GetLastError()); + ok(fibers[1] != NULL, "CreateFiber failed with error %u\n", GetLastError()); pSwitchToFiber(fibers[1]); - ok(cbCount == 1, "Wrong callback count: %d\n", cbCount); + ok(fiberCount == 1, "Wrong fiber count: %d\n", fiberCount); pDeleteFiber(fibers[1]); if (!pCreateFiberEx) @@ -138,12 +161,11 @@ return; } - SetLastError(0xdeadbeef); fibers[1] = pCreateFiberEx(0,0,0,FiberMainProc,&testparam); - ok(fibers[1] != 0, "CreateFiberEx failed with error %d\n", GetLastError()); + ok(fibers[1] != NULL, "CreateFiberEx failed with error %u\n", GetLastError()); pSwitchToFiber(fibers[1]); - ok(cbCount == 2, "Wrong callback count: %d\n", cbCount); + ok(fiberCount == 2, "Wrong fiber count: %d\n", fiberCount); pDeleteFiber(fibers[1]); if (!pIsThreadAFiber) @@ -157,32 +179,62 @@ ok(!pIsThreadAFiber(), "IsThreadAFiber reported TRUE\n"); } -static void test_FiberLocalStorage(PFLS_CALLBACK_FUNCTION cbfunc) -{ - DWORD fls; +static void test_FiberLocalStorage(void) +{ + DWORD fls, fls_2; BOOL ret; - PVOID val = (PVOID) 1587; - - if (!pFlsAlloc) + void* val; + + if (!pFlsAlloc || !pFlsSetValue || !pFlsGetValue || !pFlsFree) { win_skip( "Fiber Local Storage not supported\n" ); return; } - cbCount = 0; - - fls = pFlsAlloc(cbfunc); - ok(fls != FLS_OUT_OF_INDEXES, "FlsAlloc failed with error %d\n", GetLastError()); - - ret = pFlsSetValue(fls, val); - ok(ret, "FlsSetValue failed\n"); - ok(val == pFlsGetValue(fls), "FlsGetValue failed\n"); - - ret = pFlsFree(fls); - ok(ret, "FlsFree failed\n"); - if (cbfunc) - todo_wine ok(cbCount == 1, "Wrong callback count: %d\n", cbCount); - - /* test index 0 */ + + /* Test an unallocated index + * FlsFree should fail + * FlsGetValue and FlsSetValue should succeed + */ + SetLastError( 0xdeadbeef ); + ret = pFlsFree( 127 ); + ok( !ret, "freeing fls index 127 (unallocated) succeeded\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, + "freeing fls index 127 (unallocated) wrong error %u\n", GetLastError() ); + + val = pFlsGetValue( 127 ); + ok( val == NULL, + "getting fls index 127 (unallocated) failed with error %u\n", GetLastError() ); + + ret = pFlsSetValue( 127, (void*) 0x217 ); + ok( ret, "setting fls index 127 (unallocated) failed with error %u\n", GetLastError() ); + + SetLastError( 0xdeadbeef ); + val = pFlsGetValue( 127 ); + ok( val == (void*) 0x217, "fls index 127 (unallocated) wrong value %p\n", val ); + ok( GetLastError() == ERROR_SUCCESS, + "getting fls index 127 (unallocated) failed with error %u\n", GetLastError() ); + + /* FlsFree, FlsGetValue, and FlsSetValue out of bounds should return + * ERROR_INVALID_PARAMETER + */ + SetLastError( 0xdeadbeef ); + ret = pFlsFree( 128 ); + ok( !ret, "freeing fls index 128 (out of bounds) succeeded\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, + "freeing fls index 128 (out of bounds) wrong error %u\n", GetLastError() ); + + SetLastError( 0xdeadbeef ); + ret = pFlsSetValue( 128, (void*) 0x217 ); + ok( !ret, "setting fls index 128 (out of bounds) succeeded\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, + "setting fls index 128 (out of bounds) wrong error %u\n", GetLastError() ); + + SetLastError( 0xdeadbeef ); + val = pFlsGetValue( 128 ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, + "getting fls index 128 (out of bounds) wrong error %u\n", GetLastError() ); + + /* Test index 0 */ SetLastError( 0xdeadbeef ); val = pFlsGetValue( 0 ); ok( !val, "fls index 0 set to %p\n", val ); @@ -196,6 +248,7 @@ ok( !val, "fls index 0 wrong value %p\n", val ); ok( GetLastError() == ERROR_INVALID_PARAMETER, "setting fls index wrong error %u\n", GetLastError() ); + /* Test creating an FLS index */ fls = pFlsAlloc( NULL ); ok( fls != FLS_OUT_OF_INDEXES, "FlsAlloc failed\n" ); ok( fls != 0, "fls index 0 allocated\n" ); @@ -203,13 +256,149 @@ ok( !val, "fls index %u wrong value %p\n", fls, val ); ret = pFlsSetValue( fls, (void *)0xdeadbeef ); ok( ret, "setting fls index %u failed\n", fls ); + SetLastError( 0xdeadbeef ); val = pFlsGetValue( fls ); ok( val == (void *)0xdeadbeef, "fls index %u wrong value %p\n", fls, val ); + ok( GetLastError() == ERROR_SUCCESS, + "getting fls index %u failed with error %u\n", fls, GetLastError() ); pFlsFree( fls ); + + /* Undefined behavior: verify the value is NULL after it the slot is freed */ + SetLastError( 0xdeadbeef ); + val = pFlsGetValue( fls ); + ok( val == NULL, "fls index %u wrong value %p\n", fls, val ); + ok( GetLastError() == ERROR_SUCCESS, + "getting fls index %u failed with error %u\n", fls, GetLastError() ); + + /* Undefined behavior: verify the value is settable after the slot is freed */ ret = pFlsSetValue( fls, (void *)0xdeadbabe ); ok( ret, "setting fls index %u failed\n", fls ); val = pFlsGetValue( fls ); ok( val == (void *)0xdeadbabe, "fls index %u wrong value %p\n", fls, val ); + + /* Try to create the same FLS index again, and verify that is initialized to NULL */ + fls_2 = pFlsAlloc( NULL ); + ok( fls != FLS_OUT_OF_INDEXES, "FlsAlloc failed with error %u\n", GetLastError() ); + /* If this fails it is not an API error, but the test will be inconclusive */ + ok( fls_2 == fls, "different FLS index allocated, was %u, now %u\n", fls, fls_2 ); + + SetLastError( 0xdeadbeef ); + val = pFlsGetValue( fls_2 ); + ok( val == NULL, "fls index %u wrong value %p\n", fls, val ); + ok( GetLastError() == ERROR_SUCCESS, + "getting fls index %u failed with error %u\n", fls_2, GetLastError() ); + pFlsFree( fls_2 ); +} + +static void test_FiberLocalStorageCallback(PFLS_CALLBACK_FUNCTION cbfunc) +{ + DWORD fls; + BOOL ret; + void* val, *val2; + + if (!pFlsAlloc || !pFlsSetValue || !pFlsGetValue || !pFlsFree) + { + win_skip( "Fiber Local Storage not supported\n" ); + return; + } + + /* Test that the callback is executed */ + cbCount = 0; + fls = pFlsAlloc( cbfunc ); + ok( fls != FLS_OUT_OF_INDEXES, "FlsAlloc failed with error %u\n", GetLastError() ); + + val = (void*) 0x1587; + fls_value_to_set = val; + ret = pFlsSetValue( fls, val ); + ok(ret, "FlsSetValue failed with error %u\n", GetLastError() ); + + val2 = pFlsGetValue( fls ); + ok(val == val2, "FlsGetValue returned %p, expected %p\n", val2, val); + + ret = pFlsFree( fls ); + ok(ret, "FlsFree failed with error %u\n", GetLastError() ); + todo_wine ok( cbCount == 1, "Wrong callback count: %d\n", cbCount ); + + /* Test that callback is not executed if value is NULL */ + cbCount = 0; + fls = pFlsAlloc( cbfunc ); + ok( fls != FLS_OUT_OF_INDEXES, "FlsAlloc failed with error %u\n", GetLastError() ); + + ret = pFlsSetValue( fls, NULL ); + ok( ret, "FlsSetValue failed with error %u\n", GetLastError() ); + + pFlsFree( fls ); + ok( ret, "FlsFree failed with error %u\n", GetLastError() ); + ok( cbCount == 0, "Wrong callback count: %d\n", cbCount ); +} + +static void test_FiberLocalStorageWithFibers(PFLS_CALLBACK_FUNCTION cbfunc) +{ + void* val1 = (void*) 0x314; + void* val2 = (void*) 0x152; + BOOL ret; + + if (!pFlsAlloc || !pFlsFree || !pFlsSetValue || !pFlsGetValue) + { + win_skip( "Fiber Local Storage not supported\n" ); + return; + } + + fls_index_to_set = pFlsAlloc(cbfunc); + ok(fls_index_to_set != FLS_OUT_OF_INDEXES, "FlsAlloc failed with error %u\n", GetLastError()); + + test_ConvertThreadToFiber(); + + fiberCount = 0; + cbCount = 0; + fibers[1] = pCreateFiber(0,FiberMainProc,&testparam); + fibers[2] = pCreateFiber(0,FiberMainProc,&testparam); + ok(fibers[1] != NULL, "CreateFiber failed with error %u\n", GetLastError()); + ok(fibers[2] != NULL, "CreateFiber failed with error %u\n", GetLastError()); + ok(fiberCount == 0, "Wrong fiber count: %d\n", fiberCount); + ok(cbCount == 0, "Wrong callback count: %d\n", cbCount); + + fiberCount = 0; + cbCount = 0; + fls_value_to_set = val1; + pSwitchToFiber(fibers[1]); + ok(fiberCount == 1, "Wrong fiber count: %d\n", fiberCount); + ok(cbCount == 0, "Wrong callback count: %d\n", cbCount); + + fiberCount = 0; + cbCount = 0; + fls_value_to_set = val2; + pSwitchToFiber(fibers[2]); + ok(fiberCount == 1, "Wrong fiber count: %d\n", fiberCount); + ok(cbCount == 0, "Wrong callback count: %d\n", cbCount); + + fls_value_to_set = val2; + ret = pFlsSetValue(fls_index_to_set, fls_value_to_set); + ok(ret, "FlsSetValue failed\n"); + ok(val2 == pFlsGetValue(fls_index_to_set), "FlsGetValue failed\n"); + + fiberCount = 0; + cbCount = 0; + fls_value_to_set = val1; + pDeleteFiber(fibers[1]); + ok(fiberCount == 0, "Wrong fiber count: %d\n", fiberCount); + todo_wine ok(cbCount == 1, "Wrong callback count: %d\n", cbCount); + + fiberCount = 0; + cbCount = 0; + fls_value_to_set = val2; + pFlsFree(fls_index_to_set); + ok(fiberCount == 0, "Wrong fiber count: %d\n", fiberCount); + todo_wine ok(cbCount == 2, "Wrong callback count: %d\n", cbCount); + + fiberCount = 0; + cbCount = 0; + fls_value_to_set = val1; + pDeleteFiber(fibers[2]); + ok(fiberCount == 0, "Wrong fiber count: %d\n", fiberCount); + ok(cbCount == 0, "Wrong callback count: %d\n", cbCount); + + test_ConvertFiberToThread(); } START_TEST(fiber) @@ -223,6 +412,7 @@ } test_FiberHandling(); - test_FiberLocalStorage(NULL); - test_FiberLocalStorage(FiberLocalStorageProc); -} + test_FiberLocalStorage(); + test_FiberLocalStorageCallback(FiberLocalStorageProc); + test_FiberLocalStorageWithFibers(FiberLocalStorageProc); +} Modified: trunk/rostests/winetests/kernel32/loader.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/loader…
============================================================================== --- trunk/rostests/winetests/kernel32/loader.c [iso-8859-1] (original) +++ trunk/rostests/winetests/kernel32/loader.c [iso-8859-1] Thu Aug 18 09:22:13 2016 @@ -52,6 +52,7 @@ static NTSTATUS (WINAPI *pNtCreateSection)(HANDLE *, ACCESS_MASK, const OBJECT_ATTRIBUTES *, const LARGE_INTEGER *, ULONG, ULONG, HANDLE ); +static NTSTATUS (WINAPI *pNtQuerySection)(HANDLE, SECTION_INFORMATION_CLASS, void *, ULONG, ULONG *); static NTSTATUS (WINAPI *pNtMapViewOfSection)(HANDLE, HANDLE, PVOID *, ULONG, SIZE_T, const LARGE_INTEGER *, SIZE_T *, ULONG, ULONG, ULONG); static NTSTATUS (WINAPI *pNtUnmapViewOfSection)(HANDLE, PVOID); static NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG); @@ -222,6 +223,115 @@ return size; } +static void query_image_section( int id, const char *dll_name, const IMAGE_NT_HEADERS *nt_header ) +{ + SECTION_BASIC_INFORMATION info; + SECTION_IMAGE_INFORMATION image; + ULONG info_size = 0xdeadbeef; + NTSTATUS status; + HANDLE file, mapping; + ULONG file_size; + LARGE_INTEGER map_size; + /* truncated header is not handled correctly in windows <= w2k3 */ + BOOL truncated = nt_header->FileHeader.SizeOfOptionalHeader < sizeof(nt_header->OptionalHeader); + + file = CreateFileA( dll_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, + NULL, OPEN_EXISTING, 0, 0 ); + ok( file != INVALID_HANDLE_VALUE, "%u: CreateFile error %d\n", id, GetLastError() ); + file_size = GetFileSize( file, NULL ); + + status = pNtCreateSection( &mapping, STANDARD_RIGHTS_REQUIRED | SECTION_MAP_READ | SECTION_QUERY, + NULL, NULL, PAGE_READONLY, SEC_IMAGE, file ); + ok( !status, "%u: NtCreateSection failed err %x\n", id, status ); + if (status) + { + CloseHandle( file ); + return; + } + status = pNtQuerySection( mapping, SectionImageInformation, &image, sizeof(image), &info_size ); + ok( !status, "%u: NtQuerySection failed err %x\n", id, status ); + ok( info_size == sizeof(image), "%u: NtQuerySection wrong size %u\n", id, info_size ); + ok( (char *)image.TransferAddress == (char *)nt_header->OptionalHeader.ImageBase + nt_header->OptionalHeader.AddressOfEntryPoint, + "%u: TransferAddress wrong %p / %p+%08x\n", id, + image.TransferAddress, (char *)nt_header->OptionalHeader.ImageBase, + nt_header->OptionalHeader.AddressOfEntryPoint ); + ok( image.ZeroBits == 0, "%u: ZeroBits wrong %08x\n", id, image.ZeroBits ); + ok( image.MaximumStackSize == nt_header->OptionalHeader.SizeOfStackReserve || broken(truncated), + "%u: MaximumStackSize wrong %lx / %lx\n", id, + image.MaximumStackSize, (SIZE_T)nt_header->OptionalHeader.SizeOfStackReserve ); + ok( image.CommittedStackSize == nt_header->OptionalHeader.SizeOfStackCommit || broken(truncated), + "%u: CommittedStackSize wrong %lx / %lx\n", id, + image.CommittedStackSize, (SIZE_T)nt_header->OptionalHeader.SizeOfStackCommit ); + ok( image.SubSystemType == nt_header->OptionalHeader.Subsystem || broken(truncated), + "%u: SubSystemType wrong %08x / %08x\n", id, + image.SubSystemType, nt_header->OptionalHeader.Subsystem ); + ok( image.SubsystemVersionLow == nt_header->OptionalHeader.MinorSubsystemVersion, + "%u: SubsystemVersionLow wrong %04x / %04x\n", id, + image.SubsystemVersionLow, nt_header->OptionalHeader.MinorSubsystemVersion ); + ok( image.SubsystemVersionHigh == nt_header->OptionalHeader.MajorSubsystemVersion, + "%u: SubsystemVersionHigh wrong %04x / %04x\n", id, + image.SubsystemVersionHigh, nt_header->OptionalHeader.MajorSubsystemVersion ); + ok( image.ImageCharacteristics == nt_header->FileHeader.Characteristics, + "%u: ImageCharacteristics wrong %04x / %04x\n", id, + image.ImageCharacteristics, nt_header->FileHeader.Characteristics ); + ok( image.DllCharacteristics == nt_header->OptionalHeader.DllCharacteristics || broken(truncated), + "%u: DllCharacteristics wrong %04x / %04x\n", id, + image.DllCharacteristics, nt_header->OptionalHeader.DllCharacteristics ); + ok( image.Machine == nt_header->FileHeader.Machine, "%u: Machine wrong %04x / %04x\n", id, + image.Machine, nt_header->FileHeader.Machine ); + ok( image.LoaderFlags == nt_header->OptionalHeader.LoaderFlags, + "%u: LoaderFlags wrong %08x / %08x\n", id, + image.LoaderFlags, nt_header->OptionalHeader.LoaderFlags ); + ok( image.ImageFileSize == file_size || broken(!image.ImageFileSize), /* winxpsp1 */ + "%u: ImageFileSize wrong %08x / %08x\n", id, image.ImageFileSize, file_size ); + ok( image.CheckSum == nt_header->OptionalHeader.CheckSum, "%u: CheckSum wrong %08x / %08x\n", id, + image.CheckSum, nt_header->OptionalHeader.CheckSum ); + /* FIXME: needs more work: */ + /* image.GpValue */ + /* image.ImageFlags */ + /* image.ImageContainsCode */ + + map_size.QuadPart = (nt_header->OptionalHeader.SizeOfImage + page_size - 1) & ~(page_size - 1); + status = pNtQuerySection( mapping, SectionBasicInformation, &info, sizeof(info), NULL ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( info.Size.QuadPart == map_size.QuadPart, "NtQuerySection wrong size %x%08x / %x%08x\n", + info.Size.u.HighPart, info.Size.u.LowPart, map_size.u.HighPart, map_size.u.LowPart ); + CloseHandle( mapping ); + + map_size.QuadPart = (nt_header->OptionalHeader.SizeOfImage + page_size - 1) & ~(page_size - 1); + status = pNtCreateSection( &mapping, STANDARD_RIGHTS_REQUIRED | SECTION_MAP_READ | SECTION_QUERY, + NULL, &map_size, PAGE_READONLY, SEC_IMAGE, file ); + ok( !status, "%u: NtCreateSection failed err %x\n", id, status ); + status = pNtQuerySection( mapping, SectionBasicInformation, &info, sizeof(info), NULL ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( info.Size.QuadPart == map_size.QuadPart, "NtQuerySection wrong size %x%08x / %x%08x\n", + info.Size.u.HighPart, info.Size.u.LowPart, map_size.u.HighPart, map_size.u.LowPart ); + CloseHandle( mapping ); + + map_size.QuadPart++; + status = pNtCreateSection( &mapping, STANDARD_RIGHTS_REQUIRED | SECTION_MAP_READ | SECTION_QUERY, + NULL, &map_size, PAGE_READONLY, SEC_IMAGE, file ); + ok( status == STATUS_SECTION_TOO_BIG, "%u: NtCreateSection failed err %x\n", id, status ); + + SetFilePointerEx( file, map_size, NULL, FILE_BEGIN ); + SetEndOfFile( file ); + status = pNtCreateSection( &mapping, STANDARD_RIGHTS_REQUIRED | SECTION_MAP_READ | SECTION_QUERY, + NULL, &map_size, PAGE_READONLY, SEC_IMAGE, file ); + ok( status == STATUS_SECTION_TOO_BIG, "%u: NtCreateSection failed err %x\n", id, status ); + + map_size.QuadPart = 1; + status = pNtCreateSection( &mapping, STANDARD_RIGHTS_REQUIRED | SECTION_MAP_READ | SECTION_QUERY, + NULL, &map_size, PAGE_READONLY, SEC_IMAGE, file ); + ok( !status, "%u: NtCreateSection failed err %x\n", id, status ); + status = pNtQuerySection( mapping, SectionBasicInformation, &info, sizeof(info), NULL ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( info.Size.QuadPart == map_size.QuadPart, "NtQuerySection wrong size %x%08x / %x%08x\n", + info.Size.u.HighPart, info.Size.u.LowPart, map_size.u.HighPart, map_size.u.LowPart ); + CloseHandle( mapping ); + + CloseHandle( file ); +} + /* helper to test image section mapping */ static NTSTATUS map_image_section( const IMAGE_NT_HEADERS *nt_header ) { @@ -230,19 +340,33 @@ LARGE_INTEGER size; HANDLE file, map; NTSTATUS status; + ULONG file_size; GetTempPathA(MAX_PATH, temp_path); GetTempFileNameA(temp_path, "ldr", 0, dll_name); - size.u.LowPart = create_test_dll( &dos_header, sizeof(dos_header), nt_header, dll_name ); - ok( size.u.LowPart, "could not create %s\n", dll_name); - size.u.HighPart = 0; + file_size = create_test_dll( &dos_header, sizeof(dos_header), nt_header, dll_name ); + ok( file_size, "could not create %s\n", dll_name); file = CreateFileA(dll_name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); ok(file != INVALID_HANDLE_VALUE, "CreateFile error %d\n", GetLastError()); - status = pNtCreateSection(&map, STANDARD_RIGHTS_REQUIRED | SECTION_MAP_READ, NULL, &size, - PAGE_READONLY, SEC_IMAGE, file ); + size.QuadPart = file_size; + status = pNtCreateSection(&map, STANDARD_RIGHTS_REQUIRED | SECTION_MAP_READ | SECTION_QUERY, + NULL, &size, PAGE_READONLY, SEC_IMAGE, file ); + if (!status) + { + SECTION_BASIC_INFORMATION info; + ULONG info_size = 0xdeadbeef; + NTSTATUS ret = pNtQuerySection( map, SectionBasicInformation, &info, sizeof(info), &info_size ); + ok( !ret, "NtQuerySection failed err %x\n", ret ); + ok( info_size == sizeof(info), "NtQuerySection wrong size %u\n", info_size ); + ok( info.Attributes == (SEC_IMAGE | SEC_FILE), "NtQuerySection wrong attr %x\n", info.Attributes ); + ok( info.BaseAddress == NULL, "NtQuerySection wrong base %p\n", info.BaseAddress ); + ok( info.Size.QuadPart == file_size, "NtQuerySection wrong size %x%08x / %08x\n", + info.Size.u.HighPart, info.Size.u.LowPart, file_size ); + query_image_section( 1000, dll_name, nt_header ); + } if (map) CloseHandle( map ); CloseHandle( file ); DeleteFileA( dll_name ); @@ -574,6 +698,8 @@ SetLastError(0xdeadbeef); ret = FreeLibrary(hlib_as_data_file); ok(ret, "FreeLibrary error %d\n", GetLastError()); + + query_image_section( i, dll_name, &nt_header ); } else { @@ -600,6 +726,8 @@ nt_header.FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER); nt_header.OptionalHeader.SectionAlignment = page_size; + nt_header.OptionalHeader.AddressOfEntryPoint = 0x1234; + nt_header.OptionalHeader.DllCharacteristics = IMAGE_DLLCHARACTERISTICS_NX_COMPAT; nt_header.OptionalHeader.FileAlignment = page_size; nt_header.OptionalHeader.SizeOfHeaders = sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER); nt_header.OptionalHeader.SizeOfImage = sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + page_size; @@ -1817,7 +1945,8 @@ memset(&pbi, 0, sizeof(pbi)); ret = pNtQueryInformationProcess(process, ProcessBasicInformation, &pbi, sizeof(pbi), NULL); ok(!ret, "NtQueryInformationProcess error %#x\n", ret); - ok(pbi.ExitStatus == STILL_ACTIVE, "expected STILL_ACTIVE, got %lu\n", pbi.ExitStatus); + ok(pbi.ExitStatus == STILL_ACTIVE || pbi.ExitStatus == 195, + "expected STILL_ACTIVE, got %lu\n", pbi.ExitStatus); affinity = 1; ret = pNtSetInformationProcess(process, ProcessAffinityMask, &affinity, sizeof(affinity)); ok(!ret, "NtSetInformationProcess error %#x\n", ret); @@ -1852,7 +1981,8 @@ memset(&pbi, 0, sizeof(pbi)); ret = pNtQueryInformationProcess(process, ProcessBasicInformation, &pbi, sizeof(pbi), NULL); ok(!ret, "NtQueryInformationProcess error %#x\n", ret); - ok(pbi.ExitStatus == STILL_ACTIVE, "expected STILL_ACTIVE, got %lu\n", pbi.ExitStatus); + ok(pbi.ExitStatus == STILL_ACTIVE || pbi.ExitStatus == 195, + "expected STILL_ACTIVE, got %lu\n", pbi.ExitStatus); affinity = 1; ret = pNtSetInformationProcess(process, ProcessAffinityMask, &affinity, sizeof(affinity)); ok(!ret, "NtSetInformationProcess error %#x\n", ret); @@ -2777,6 +2907,7 @@ ntdll = GetModuleHandleA("ntdll.dll"); pNtCreateSection = (void *)GetProcAddress(ntdll, "NtCreateSection"); + pNtQuerySection = (void *)GetProcAddress(ntdll, "NtQuerySection"); pNtMapViewOfSection = (void *)GetProcAddress(ntdll, "NtMapViewOfSection"); pNtUnmapViewOfSection = (void *)GetProcAddress(ntdll, "NtUnmapViewOfSection"); pNtTerminateProcess = (void *)GetProcAddress(ntdll, "NtTerminateProcess"); Modified: trunk/rostests/winetests/kernel32/process.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/proces…
============================================================================== --- trunk/rostests/winetests/kernel32/process.c [iso-8859-1] (original) +++ trunk/rostests/winetests/kernel32/process.c [iso-8859-1] Thu Aug 18 09:22:13 2016 @@ -70,7 +70,6 @@ static BOOL (WINAPI *pQueryFullProcessImageNameA)(HANDLE hProcess, DWORD dwFlags, LPSTR lpExeName, PDWORD lpdwSize); static BOOL (WINAPI *pQueryFullProcessImageNameW)(HANDLE hProcess, DWORD dwFlags, LPWSTR lpExeName, PDWORD lpdwSize); static DWORD (WINAPI *pK32GetProcessImageFileNameA)(HANDLE,LPSTR,DWORD); -static struct _TEB * (WINAPI *pNtCurrentTeb)(void); static HANDLE (WINAPI *pCreateJobObjectW)(LPSECURITY_ATTRIBUTES sa, LPCWSTR name); static BOOL (WINAPI *pAssignProcessToJobObject)(HANDLE job, HANDLE process); static BOOL (WINAPI *pIsProcessInJob)(HANDLE process, HANDLE job, PBOOL result); @@ -226,7 +225,6 @@ hkernel32 = GetModuleHandleA("kernel32"); hntdll = GetModuleHandleA("ntdll.dll"); - pNtCurrentTeb = (void *)GetProcAddress(hntdll, "NtCurrentTeb"); pNtQueryInformationProcess = (void *)GetProcAddress(hntdll, "NtQueryInformationProcess"); pGetNativeSystemInfo = (void *) GetProcAddress(hkernel32, "GetNativeSystemInfo"); @@ -297,6 +295,7 @@ */ static void doChild(const char* file, const char* option) { + RTL_USER_PROCESS_PARAMETERS *params = NtCurrentTeb()->Peb->ProcessParameters; STARTUPINFOA siA; STARTUPINFOW siW; int i; @@ -325,15 +324,10 @@ siA.dwFlags, siA.wShowWindow, (DWORD_PTR)siA.hStdInput, (DWORD_PTR)siA.hStdOutput, (DWORD_PTR)siA.hStdError); - if (pNtCurrentTeb) - { - RTL_USER_PROCESS_PARAMETERS *params = pNtCurrentTeb()->Peb->ProcessParameters; - - /* check the console handles in the TEB */ - childPrintf(hFile, "[TEB]\nhStdInput=%lu\nhStdOutput=%lu\nhStdError=%lu\n\n", - (DWORD_PTR)params->hStdInput, (DWORD_PTR)params->hStdOutput, - (DWORD_PTR)params->hStdError); - } + /* check the console handles in the TEB */ + childPrintf(hFile, "[TEB]\nhStdInput=%lu\nhStdOutput=%lu\nhStdError=%lu\n\n", + (DWORD_PTR)params->hStdInput, (DWORD_PTR)params->hStdOutput, + (DWORD_PTR)params->hStdError); /* since GetStartupInfoW is only implemented in win2k, * zero out before calling so we can notice the difference @@ -2873,12 +2867,6 @@ char buffer[MAX_PATH]; STARTUPINFOA startup; PROCESS_INFORMATION info; - - if (!pNtCurrentTeb) - { - win_skip( "NtCurrentTeb not supported\n" ); - return; - } memset(&startup, 0, sizeof(startup)); startup.cb = sizeof(startup); Modified: trunk/rostests/winetests/kernel32/thread.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/thread…
============================================================================== --- trunk/rostests/winetests/kernel32/thread.c [iso-8859-1] (original) +++ trunk/rostests/winetests/kernel32/thread.c [iso-8859-1] Thu Aug 18 09:22:13 2016 @@ -1103,42 +1103,42 @@ static void test_GetThreadSelectorEntry(void) { - TEB *teb = NtCurrentTeb(); LDT_ENTRY entry; CONTEXT ctx; - TEB *teb_fs; - DWORD ret; + DWORD limit; + void *base; + BOOL ret; memset(&ctx, 0x11, sizeof(ctx)); ctx.ContextFlags = CONTEXT_SEGMENTS | CONTEXT_CONTROL; ret = GetThreadContext(GetCurrentThread(), &ctx); ok(ret, "GetThreadContext error %u\n", GetLastError()); - ok(!HIWORD(ctx.SegCs) && !HIWORD(ctx.SegDs) && !HIWORD(ctx.SegEs) && !HIWORD(ctx.SegFs) && !HIWORD(ctx.SegGs), - "cs %08x, ds %08x, es %08x, fs %08x, gs %08x\n", ctx.SegCs, ctx.SegDs, ctx.SegEs, ctx.SegFs, ctx.SegGs); + ok(!HIWORD(ctx.SegCs), "expected HIWORD(SegCs) == 0, got %u\n", ctx.SegCs); + ok(!HIWORD(ctx.SegDs), "expected HIWORD(SegDs) == 0, got %u\n", ctx.SegDs); + ok(!HIWORD(ctx.SegFs), "expected HIWORD(SegFs) == 0, got %u\n", ctx.SegFs); ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegCs, &entry); ok(ret, "GetThreadSelectorEntry(SegCs) error %u\n", GetLastError()); - ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegDs, &entry); ok(ret, "GetThreadSelectorEntry(SegDs) error %u\n", GetLastError()); memset(&entry, 0x11, sizeof(entry)); ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegFs, &entry); ok(ret, "GetThreadSelectorEntry(SegFs) error %u\n", GetLastError()); - - teb_fs = (TEB *)((entry.HighWord.Bits.BaseHi << 24) | (entry.HighWord.Bits.BaseMid << 16) | entry.BaseLow); - ok(teb_fs == teb, "teb_fs %p != teb %p\n", teb_fs, teb); - - ret = (entry.HighWord.Bits.LimitHi << 16) | entry.LimitLow; - ok(ret == 0x0fff || ret == 0x4000 /* testbot win7u */, "got %#x\n", ret); - - ok(entry.HighWord.Bits.Dpl == 3, "got %#x\n", entry.HighWord.Bits.Dpl); - ok(entry.HighWord.Bits.Sys == 0, "got %#x\n", entry.HighWord.Bits.Sys); - ok(entry.HighWord.Bits.Pres == 1, "got %#x\n", entry.HighWord.Bits.Pres); - ok(entry.HighWord.Bits.Granularity == 0, "got %#x\n", entry.HighWord.Bits.Granularity); - ok(entry.HighWord.Bits.Default_Big == 1, "got %#x\n", entry.HighWord.Bits.Default_Big); - ok(entry.HighWord.Bits.Type == 0x13, "got %#x\n", entry.HighWord.Bits.Type); - ok(entry.HighWord.Bits.Reserved_0 == 0, "got %#x\n", entry.HighWord.Bits.Reserved_0); + entry.HighWord.Bits.Type &= ~1; /* ignore accessed bit */ + + base = (void *)((entry.HighWord.Bits.BaseHi << 24) | (entry.HighWord.Bits.BaseMid << 16) | entry.BaseLow); + limit = (entry.HighWord.Bits.LimitHi << 16) | entry.LimitLow; + + ok(base == NtCurrentTeb(), "expected %p, got %p\n", NtCurrentTeb(), base); + ok(limit == 0x0fff || limit == 0x4000, "expected 0x0fff or 0x4000, got %#x\n", limit); + ok(entry.HighWord.Bits.Type == 0x12, "expected 0x12, got %#x\n", entry.HighWord.Bits.Type); + ok(entry.HighWord.Bits.Dpl == 3, "expected 3, got %u\n", entry.HighWord.Bits.Dpl); + ok(entry.HighWord.Bits.Pres == 1, "expected 1, got %u\n", entry.HighWord.Bits.Pres); + ok(entry.HighWord.Bits.Sys == 0, "expected 0, got %u\n", entry.HighWord.Bits.Sys); + ok(entry.HighWord.Bits.Reserved_0 == 0, "expected 0, got %u\n", entry.HighWord.Bits.Reserved_0); + ok(entry.HighWord.Bits.Default_Big == 1, "expected 1, got %u\n", entry.HighWord.Bits.Default_Big); + ok(entry.HighWord.Bits.Granularity == 0, "expected 0, got %u\n", entry.HighWord.Bits.Granularity); } static void test_NtSetLdtEntries(void) Modified: trunk/rostests/winetests/kernel32/virtual.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/virtua…
============================================================================== --- trunk/rostests/winetests/kernel32/virtual.c [iso-8859-1] (original) +++ trunk/rostests/winetests/kernel32/virtual.c [iso-8859-1] Thu Aug 18 09:22:13 2016 @@ -41,13 +41,15 @@ static UINT (WINAPI *pGetWriteWatch)(DWORD,LPVOID,SIZE_T,LPVOID*,ULONG_PTR*,ULONG*); static UINT (WINAPI *pResetWriteWatch)(LPVOID,SIZE_T); static NTSTATUS (WINAPI *pNtAreMappedFilesTheSame)(PVOID,PVOID); +static NTSTATUS (WINAPI *pNtCreateSection)(HANDLE *, ACCESS_MASK, const OBJECT_ATTRIBUTES *, + const LARGE_INTEGER *, ULONG, ULONG, HANDLE ); static NTSTATUS (WINAPI *pNtMapViewOfSection)(HANDLE, HANDLE, PVOID *, ULONG, SIZE_T, const LARGE_INTEGER *, SIZE_T *, ULONG, ULONG, ULONG); static DWORD (WINAPI *pNtUnmapViewOfSection)(HANDLE, PVOID); +static NTSTATUS (WINAPI *pNtQuerySection)(HANDLE, SECTION_INFORMATION_CLASS, void *, ULONG, ULONG *); static PVOID (WINAPI *pRtlAddVectoredExceptionHandler)(ULONG, PVECTORED_EXCEPTION_HANDLER); static ULONG (WINAPI *pRtlRemoveVectoredExceptionHandler)(PVOID); static BOOL (WINAPI *pGetProcessDEPPolicy)(HANDLE, LPDWORD, PBOOL); static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL); -static NTSTATUS (WINAPI *pNtQuerySection)(HANDLE, int, PVOID, ULONG, PULONG); static NTSTATUS (WINAPI *pNtProtectVirtualMemory)(HANDLE, PVOID *, SIZE_T *, ULONG, ULONG *); static NTSTATUS (WINAPI *pNtAllocateVirtualMemory)(HANDLE, PVOID *, ULONG, SIZE_T *, ULONG, ULONG); static NTSTATUS (WINAPI *pNtFreeVirtualMemory)(HANDLE, PVOID *, SIZE_T *, ULONG); @@ -112,20 +114,13 @@ SetLastError(0xdeadbeef); addr1 = pVirtualAllocEx(hProcess, NULL, alloc_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE); - if (!addr1 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { /* Win9x */ - win_skip("VirtualAllocEx not implemented\n"); - TerminateProcess(hProcess, 0); - CloseHandle(hProcess); - return; - } + ok(addr1 != NULL, "VirtualAllocEx error %u\n", GetLastError()); src = VirtualAlloc( NULL, alloc_size, MEM_COMMIT, PAGE_READWRITE ); dst = VirtualAlloc( NULL, alloc_size, MEM_COMMIT, PAGE_READWRITE ); for (i = 0; i < alloc_size; i++) src[i] = i & 0xff; - ok(addr1 != NULL, "VirtualAllocEx error %u\n", GetLastError()); b = WriteProcessMemory(hProcess, addr1, src, alloc_size, &bytes_written); ok(b && (bytes_written == alloc_size), "%lu bytes written\n", bytes_written); @@ -174,9 +169,8 @@ SetLastError(0xdeadbeef); addr1 = pVirtualAllocEx(hProcess, 0, 0, MEM_RESERVE, PAGE_NOACCESS); ok(addr1 == NULL, "VirtualAllocEx should fail on zero-sized allocation\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER /* NT */ || - GetLastError() == ERROR_NOT_ENOUGH_MEMORY, /* Win9x */ - "got %u, expected ERROR_INVALID_PARAMETER\n", GetLastError()); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "got %u, expected ERROR_INVALID_PARAMETER\n", GetLastError()); addr1 = pVirtualAllocEx(hProcess, 0, 0xFFFC, MEM_RESERVE, PAGE_NOACCESS); ok(addr1 != NULL, "VirtualAllocEx failed\n"); @@ -189,17 +183,13 @@ ok(info.AllocationProtect == PAGE_NOACCESS, "%x != PAGE_NOACCESS\n", info.AllocationProtect); ok(info.RegionSize == 0x10000, "%lx != 0x10000\n", info.RegionSize); ok(info.State == MEM_RESERVE, "%x != MEM_RESERVE\n", info.State); - /* NT reports Protect == 0 for a not committed memory block */ - ok(info.Protect == 0 /* NT */ || - info.Protect == PAGE_NOACCESS, /* Win9x */ - "%x != PAGE_NOACCESS\n", info.Protect); + ok(info.Protect == 0, "%x != PAGE_NOACCESS\n", info.Protect); ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type); SetLastError(0xdeadbeef); ok(!VirtualProtectEx(hProcess, addr1, 0xFFFC, PAGE_READONLY, &old_prot), "VirtualProtectEx should fail on a not committed memory\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x */ + ok(GetLastError() == ERROR_INVALID_ADDRESS, "got %u, expected ERROR_INVALID_ADDRESS\n", GetLastError()); addr2 = pVirtualAllocEx(hProcess, addr1, 0x1000, MEM_COMMIT, PAGE_NOACCESS); @@ -221,9 +211,8 @@ SetLastError(0xdeadbeef); ok(!VirtualProtectEx(hProcess, addr1, 0xFFFC, PAGE_READONLY, &old_prot), "VirtualProtectEx should fail on a not committed memory\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x */ - "got %u, expected ERROR_INVALID_ADDRESS\n", GetLastError()); + ok(GetLastError() == ERROR_INVALID_ADDRESS, + "got %u, expected ERROR_INVALID_ADDRESS\n", GetLastError()); old_prot = 0; ok(VirtualProtectEx(hProcess, addr1, 0x1000, PAGE_READONLY, &old_prot), "VirtualProtectEx failed\n"); @@ -263,8 +252,7 @@ SetLastError(0xdeadbeef); addr1 = VirtualAlloc(0, 0, MEM_RESERVE, PAGE_NOACCESS); ok(addr1 == NULL, "VirtualAlloc should fail on zero-sized allocation\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER /* NT */ || - GetLastError() == ERROR_NOT_ENOUGH_MEMORY, /* Win9x */ + ok(GetLastError() == ERROR_INVALID_PARAMETER, "got %d, expected ERROR_INVALID_PARAMETER\n", GetLastError()); addr1 = VirtualAlloc(0, 0xFFFC, MEM_RESERVE, PAGE_NOACCESS); @@ -278,17 +266,13 @@ ok(info.AllocationProtect == PAGE_NOACCESS, "%x != PAGE_NOACCESS\n", info.AllocationProtect); ok(info.RegionSize == 0x10000, "%lx != 0x10000\n", info.RegionSize); ok(info.State == MEM_RESERVE, "%x != MEM_RESERVE\n", info.State); - /* NT reports Protect == 0 for a not committed memory block */ - ok(info.Protect == 0 /* NT */ || - info.Protect == PAGE_NOACCESS, /* Win9x */ - "%x != PAGE_NOACCESS\n", info.Protect); + ok(info.Protect == 0, "%x != PAGE_NOACCESS\n", info.Protect); ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type); SetLastError(0xdeadbeef); ok(!VirtualProtect(addr1, 0xFFFC, PAGE_READONLY, &old_prot), "VirtualProtect should fail on a not committed memory\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x */ + ok( GetLastError() == ERROR_INVALID_ADDRESS, "got %d, expected ERROR_INVALID_ADDRESS\n", GetLastError()); addr2 = VirtualAlloc(addr1, 0x1000, MEM_COMMIT, PAGE_NOACCESS); @@ -310,8 +294,7 @@ SetLastError(0xdeadbeef); ok(!VirtualProtect(addr1, 0xFFFC, PAGE_READONLY, &old_prot), "VirtualProtect should fail on a not committed memory\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x */ + ok( GetLastError() == ERROR_INVALID_ADDRESS, "got %d, expected ERROR_INVALID_ADDRESS\n", GetLastError()); ok(VirtualProtect(addr1, 0x1000, PAGE_READONLY, &old_prot), "VirtualProtect failed\n"); @@ -331,30 +314,26 @@ ok( *(DWORD *)addr1 == 0x55555555, "wrong data %x\n", *(DWORD *)addr1 ); addr2 = VirtualAlloc( addr1, 0x1000, MEM_RESET, PAGE_NOACCESS ); - ok( addr2 == addr1 || broken( !addr2 && GetLastError() == ERROR_INVALID_PARAMETER), /* win9x */ - "VirtualAlloc failed err %u\n", GetLastError() ); + ok( addr2 == addr1, "VirtualAlloc failed err %u\n", GetLastError() ); ok( *(DWORD *)addr1 == 0x55555555 || *(DWORD *)addr1 == 0, "wrong data %x\n", *(DWORD *)addr1 ); - if (addr2) - { - ok(VirtualQuery(addr1, &info, sizeof(info)) == sizeof(info), - "VirtualQuery failed\n"); - ok(info.RegionSize == 0x1000, "%lx != 0x1000\n", info.RegionSize); - ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State); - ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect); - - addr2 = VirtualAlloc( (char *)addr1 + 0x1000, 0x1000, MEM_RESET, PAGE_NOACCESS ); - ok( (char *)addr2 == (char *)addr1 + 0x1000, "VirtualAlloc failed\n" ); - - ok(VirtualQuery(addr2, &info, sizeof(info)) == sizeof(info), - "VirtualQuery failed\n"); - ok(info.RegionSize == 0xf000, "%lx != 0xf000\n", info.RegionSize); - ok(info.State == MEM_RESERVE, "%x != MEM_RESERVE\n", info.State); - ok(info.Protect == 0, "%x != 0\n", info.Protect); - - addr2 = VirtualAlloc( (char *)addr1 + 0xf000, 0x2000, MEM_RESET, PAGE_NOACCESS ); - ok( !addr2, "VirtualAlloc failed\n" ); - ok( GetLastError() == ERROR_INVALID_ADDRESS, "wrong error %u\n", GetLastError() ); - } + ok(VirtualQuery(addr1, &info, sizeof(info)) == sizeof(info), + "VirtualQuery failed\n"); + ok(info.RegionSize == 0x1000, "%lx != 0x1000\n", info.RegionSize); + ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State); + ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect); + + addr2 = VirtualAlloc( (char *)addr1 + 0x1000, 0x1000, MEM_RESET, PAGE_NOACCESS ); + ok( (char *)addr2 == (char *)addr1 + 0x1000, "VirtualAlloc failed\n" ); + + ok(VirtualQuery(addr2, &info, sizeof(info)) == sizeof(info), + "VirtualQuery failed\n"); + ok(info.RegionSize == 0xf000, "%lx != 0xf000\n", info.RegionSize); + ok(info.State == MEM_RESERVE, "%x != MEM_RESERVE\n", info.State); + ok(info.Protect == 0, "%x != 0\n", info.Protect); + + addr2 = VirtualAlloc( (char *)addr1 + 0xf000, 0x2000, MEM_RESET, PAGE_NOACCESS ); + ok( !addr2, "VirtualAlloc failed\n" ); + ok( GetLastError() == ERROR_INVALID_ADDRESS, "wrong error %u\n", GetLastError() ); /* invalid protection values */ SetLastError(0xdeadbeef); @@ -447,8 +426,14 @@ const char *name; HANDLE file, mapping, map2; void *ptr, *ptr2, *addr; + SECTION_BASIC_INFORMATION section_info; + SECTION_IMAGE_INFORMATION image_info; MEMORY_BASIC_INFORMATION info; BOOL ret; + SIZE_T size; + NTSTATUS status; + ULONG info_size; + LARGE_INTEGER map_size; SetLastError(0xdeadbeef); file = CreateFileA( testfile, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 ); @@ -464,14 +449,13 @@ SetLastError(0xdeadbeef); ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAPE_READ error %u\n", GetLastError() ); + ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() ); UnmapViewOfFile( ptr ); - /* this fails on win9x but succeeds on NT */ SetLastError(0xdeadbeef); ptr = MapViewOfFile( mapping, FILE_MAP_COPY, 0, 0, 4096 ); - if (ptr) UnmapViewOfFile( ptr ); - else ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); + ok( ptr != NULL, "MapViewOfFile FILE_MAP_COPY error %u\n", GetLastError() ); + UnmapViewOfFile( ptr ); SetLastError(0xdeadbeef); ptr = MapViewOfFile( mapping, 0, 0, 0, 4096 ); @@ -496,24 +480,21 @@ ok( ret, "DuplicateHandle failed error %u\n", GetLastError()); SetLastError(0xdeadbeef); ptr = MapViewOfFile( map2, FILE_MAP_WRITE, 0, 0, 4096 ); - if (!ptr) - { - ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - CloseHandle( map2 ); - ret = DuplicateHandle( GetCurrentProcess(), mapping, GetCurrentProcess(), &map2, 0, FALSE, 0 ); - ok( ret, "DuplicateHandle failed error %u\n", GetLastError()); - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( map2, 0, 0, 0, 4096 ); - ok( !ptr, "MapViewOfFile succeeded\n" ); - ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - CloseHandle( map2 ); - ret = DuplicateHandle( GetCurrentProcess(), mapping, GetCurrentProcess(), &map2, - FILE_MAP_READ, FALSE, 0 ); - ok( ret, "DuplicateHandle failed error %u\n", GetLastError()); - ptr = MapViewOfFile( map2, 0, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile NO_ACCESS error %u\n", GetLastError() ); - } - else win_skip( "no access checks on win9x\n" ); + ok( !ptr, "MapViewOfFile succeeded\n" ); + ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); + CloseHandle( map2 ); + ret = DuplicateHandle( GetCurrentProcess(), mapping, GetCurrentProcess(), &map2, 0, FALSE, 0 ); + ok( ret, "DuplicateHandle failed error %u\n", GetLastError()); + SetLastError(0xdeadbeef); + ptr = MapViewOfFile( map2, 0, 0, 0, 4096 ); + ok( !ptr, "MapViewOfFile succeeded\n" ); + ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); + CloseHandle( map2 ); + ret = DuplicateHandle( GetCurrentProcess(), mapping, GetCurrentProcess(), &map2, + FILE_MAP_READ, FALSE, 0 ); + ok( ret, "DuplicateHandle failed error %u\n", GetLastError()); + ptr = MapViewOfFile( map2, 0, 0, 0, 4096 ); + ok( ptr != NULL, "MapViewOfFile NO_ACCESS error %u\n", GetLastError() ); UnmapViewOfFile( ptr ); CloseHandle( map2 ); @@ -530,11 +511,10 @@ ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() ); UnmapViewOfFile( ptr ); - /* this fails on win9x but succeeds on NT */ SetLastError(0xdeadbeef); ptr = MapViewOfFile( mapping, FILE_MAP_COPY, 0, 0, 4096 ); - if (ptr) UnmapViewOfFile( ptr ); - else ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); + ok( ptr != NULL, "MapViewOfFile FILE_MAP_COPY error %u\n", GetLastError() ); + UnmapViewOfFile( ptr ); SetLastError(0xdeadbeef); ptr = MapViewOfFile( mapping, 0, 0, 0, 4096 ); @@ -580,33 +560,8 @@ SetLastError(0xdeadbeef); mapping = CreateFileMappingA( file, NULL, PAGE_NOACCESS, 0, 4096, NULL ); - /* fails on NT but succeeds on win9x */ - if (!mapping) ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); - else - { - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_COPY, 0, 0, 4096 ); - ok( !ptr, "MapViewOfFile FILE_MAP_COPY succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, 0, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile 0 error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 4096 ); - ok( !ptr, "MapViewOfFile FILE_MAP_WRITE succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); - - CloseHandle( mapping ); - } - + ok( !mapping, "CreateFileMappingA succeeded\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); CloseHandle( file ); /* now try read-only file */ @@ -661,12 +616,12 @@ SetLastError(0xdeadbeef); name = "Local\\Foo"; - file = CreateFileMappingA( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, name ); + file = CreateFileMappingA( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4090, name ); /* nt4 doesn't have Local\\ */ if (!file && GetLastError() == ERROR_PATH_NOT_FOUND) { name = "Foo"; - file = CreateFileMappingA( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, name ); + file = CreateFileMappingA( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4090, name ); } ok( file != 0, "CreateFileMapping PAGE_READWRITE error %u\n", GetLastError() ); @@ -675,26 +630,37 @@ ok( mapping != 0, "OpenFileMapping FILE_MAP_READ error %u\n", GetLastError() ); SetLastError(0xdeadbeef); ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 0 ); - if (!ptr) - { - SIZE_T size; - ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() ); - SetLastError(0xdeadbeef); - size = VirtualQuery( ptr, &info, sizeof(info) ); - ok( size == sizeof(info), - "VirtualQuery error %u\n", GetLastError() ); - ok( info.BaseAddress == ptr, "%p != %p\n", info.BaseAddress, ptr ); - ok( info.AllocationBase == ptr, "%p != %p\n", info.AllocationBase, ptr ); - ok( info.AllocationProtect == PAGE_READONLY, "%x != PAGE_READONLY\n", info.AllocationProtect ); - ok( info.RegionSize == 4096, "%lx != 4096\n", info.RegionSize ); - ok( info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State ); - ok( info.Protect == PAGE_READONLY, "%x != PAGE_READONLY\n", info.Protect ); - } - else win_skip( "no access checks on win9x\n" ); + ok( !ptr, "MapViewOfFile FILE_MAP_WRITE succeeded\n" ); + ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); + SetLastError(0xdeadbeef); + ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 ); + ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() ); + SetLastError(0xdeadbeef); + size = VirtualQuery( ptr, &info, sizeof(info) ); + ok( size == sizeof(info), + "VirtualQuery error %u\n", GetLastError() ); + ok( info.BaseAddress == ptr, "%p != %p\n", info.BaseAddress, ptr ); + ok( info.AllocationBase == ptr, "%p != %p\n", info.AllocationBase, ptr ); + ok( info.AllocationProtect == PAGE_READONLY, "%x != PAGE_READONLY\n", info.AllocationProtect ); + ok( info.RegionSize == 4096, "%lx != 4096\n", info.RegionSize ); + ok( info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State ); + ok( info.Protect == PAGE_READONLY, "%x != PAGE_READONLY\n", info.Protect ); UnmapViewOfFile( ptr ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, + sizeof(section_info), &info_size ); + ok( status == STATUS_ACCESS_DENIED, "NtQuerySection failed err %x\n", status ); + CloseHandle( mapping ); + mapping = OpenFileMappingA( FILE_MAP_READ | SECTION_QUERY, FALSE, name ); + ok( mapping != 0, "OpenFileMapping FILE_MAP_READ error %u\n", GetLastError() ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, + sizeof(section_info), &info_size ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( info_size == sizeof(section_info), "NtQuerySection wrong size %u\n", info_size ); + ok( section_info.Attributes == SEC_COMMIT, "NtQuerySection wrong attr %08x\n", + section_info.Attributes ); + ok( section_info.BaseAddress == NULL, "NtQuerySection wrong base %p\n", section_info.BaseAddress ); + ok( section_info.Size.QuadPart == info.RegionSize, "NtQuerySection wrong size %x%08x / %08lx\n", + section_info.Size.u.HighPart, section_info.Size.u.LowPart, info.RegionSize ); CloseHandle( mapping ); SetLastError(0xdeadbeef); @@ -702,26 +668,38 @@ ok( mapping != 0, "OpenFileMapping FILE_MAP_WRITE error %u\n", GetLastError() ); SetLastError(0xdeadbeef); ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 ); - if (!ptr) - { - SIZE_T size; - ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 0 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_WRITE error %u\n", GetLastError() ); - SetLastError(0xdeadbeef); - size = VirtualQuery( ptr, &info, sizeof(info) ); - ok( size == sizeof(info), - "VirtualQuery error %u\n", GetLastError() ); - ok( info.BaseAddress == ptr, "%p != %p\n", info.BaseAddress, ptr ); - ok( info.AllocationBase == ptr, "%p != %p\n", info.AllocationBase, ptr ); - ok( info.AllocationProtect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.AllocationProtect ); - ok( info.RegionSize == 4096, "%lx != 4096\n", info.RegionSize ); - ok( info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State ); - ok( info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect ); - } - else win_skip( "no access checks on win9x\n" ); + ok( !ptr, "MapViewOfFile succeeded\n" ); + ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); + SetLastError(0xdeadbeef); + ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 0 ); + ok( ptr != NULL, "MapViewOfFile FILE_MAP_WRITE error %u\n", GetLastError() ); + SetLastError(0xdeadbeef); + size = VirtualQuery( ptr, &info, sizeof(info) ); + ok( size == sizeof(info), + "VirtualQuery error %u\n", GetLastError() ); + ok( info.BaseAddress == ptr, "%p != %p\n", info.BaseAddress, ptr ); + ok( info.AllocationBase == ptr, "%p != %p\n", info.AllocationBase, ptr ); + ok( info.AllocationProtect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.AllocationProtect ); + ok( info.RegionSize == 4096, "%lx != 4096\n", info.RegionSize ); + ok( info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State ); + ok( info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect ); UnmapViewOfFile( ptr ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, + sizeof(section_info), &info_size ); + ok( status == STATUS_ACCESS_DENIED, "NtQuerySection failed err %x\n", status ); + CloseHandle( mapping ); + + mapping = OpenFileMappingA( FILE_MAP_WRITE | SECTION_QUERY, FALSE, name ); + ok( mapping != 0, "OpenFileMapping FILE_MAP_WRITE error %u\n", GetLastError() ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, + sizeof(section_info), &info_size ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( info_size == sizeof(section_info), "NtQuerySection wrong size %u\n", info_size ); + ok( section_info.Attributes == SEC_COMMIT, "NtQuerySection wrong attr %08x\n", + section_info.Attributes ); + ok( section_info.BaseAddress == NULL, "NtQuerySection wrong base %p\n", section_info.BaseAddress ); + ok( section_info.Size.QuadPart == info.RegionSize, "NtQuerySection wrong size %x%08x / %08lx\n", + section_info.Size.u.HighPart, section_info.Size.u.LowPart, info.RegionSize ); CloseHandle( mapping ); CloseHandle( file ); @@ -729,14 +707,21 @@ /* read/write mapping with SEC_RESERVE */ mapping = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_RESERVE, 0, MAPPING_SIZE, NULL); ok(mapping != INVALID_HANDLE_VALUE, "CreateFileMappingA failed with error %d\n", GetLastError()); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, + sizeof(section_info), NULL ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( section_info.Attributes == SEC_RESERVE, "NtQuerySection wrong attr %08x\n", + section_info.Attributes ); + ok( section_info.BaseAddress == NULL, "NtQuerySection wrong base %p\n", section_info.BaseAddress ); + ok( section_info.Size.QuadPart == MAPPING_SIZE, "NtQuerySection wrong size %x%08x / %08x\n", + section_info.Size.u.HighPart, section_info.Size.u.LowPart, MAPPING_SIZE ); ptr = MapViewOfFile(mapping, FILE_MAP_WRITE, 0, 0, 0); ok(ptr != NULL, "MapViewOfFile failed with error %d\n", GetLastError()); ptr2 = MapViewOfFile(mapping, FILE_MAP_WRITE, 0, 0, 0); - /* on NT ptr != ptr2 but on Win9x ptr == ptr2 */ - ok(ptr2 != NULL, "MapViewOfFile failed with error %d\n", GetLastError()); - trace("mapping same section resulted in views %p and %p\n", ptr, ptr2); + ok( ptr2 != NULL, "MapViewOfFile failed with error %d\n", GetLastError()); + ok( ptr != ptr2, "MapViewOfFile returned same pointer\n" ); ret = VirtualQuery(ptr, &info, sizeof(info)); ok(ret, "VirtualQuery failed with error %d\n", GetLastError()); @@ -744,40 +729,24 @@ ok(info.AllocationBase == ptr, "AllocationBase should have been %p but was %p instead\n", ptr, info.AllocationBase); ok(info.RegionSize == MAPPING_SIZE, "RegionSize should have been 0x%x but was 0x%lx\n", MAPPING_SIZE, info.RegionSize); ok(info.State == MEM_RESERVE, "State should have been MEM_RESERVE instead of 0x%x\n", info.State); - if (info.Type == MEM_PRIVATE) /* win9x is different for uncommitted mappings */ - { - ok(info.AllocationProtect == PAGE_NOACCESS, - "AllocationProtect should have been PAGE_NOACCESS but was 0x%x\n", info.AllocationProtect); - ok(info.Protect == PAGE_NOACCESS, - "Protect should have been PAGE_NOACCESS instead of 0x%x\n", info.Protect); - } - else - { - ok(info.AllocationProtect == PAGE_READWRITE, - "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); - ok(info.Protect == 0, "Protect should have been 0 instead of 0x%x\n", info.Protect); - ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); - } - - if (ptr != ptr2) - { - ret = VirtualQuery(ptr2, &info, sizeof(info)); - ok(ret, "VirtualQuery failed with error %d\n", GetLastError()); - ok(info.BaseAddress == ptr2, - "BaseAddress should have been %p but was %p instead\n", ptr2, info.BaseAddress); - ok(info.AllocationBase == ptr2, - "AllocationBase should have been %p but was %p instead\n", ptr2, info.AllocationBase); - ok(info.AllocationProtect == PAGE_READWRITE, - "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); - ok(info.RegionSize == MAPPING_SIZE, - "RegionSize should have been 0x%x but was 0x%lx\n", MAPPING_SIZE, info.RegionSize); - ok(info.State == MEM_RESERVE, - "State should have been MEM_RESERVE instead of 0x%x\n", info.State); - ok(info.Protect == 0, - "Protect should have been 0 instead of 0x%x\n", info.Protect); - ok(info.Type == MEM_MAPPED, - "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); - } + ok(info.AllocationProtect == PAGE_READWRITE, + "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); + ok(info.Protect == 0, "Protect should have been 0 instead of 0x%x\n", info.Protect); + ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); + + ret = VirtualQuery(ptr2, &info, sizeof(info)); + ok(ret, "VirtualQuery failed with error %d\n", GetLastError()); + ok(info.BaseAddress == ptr2, + "BaseAddress should have been %p but was %p instead\n", ptr2, info.BaseAddress); + ok(info.AllocationBase == ptr2, + "AllocationBase should have been %p but was %p instead\n", ptr2, info.AllocationBase); + ok(info.AllocationProtect == PAGE_READWRITE, + "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); + ok(info.RegionSize == MAPPING_SIZE, + "RegionSize should have been 0x%x but was 0x%lx\n", MAPPING_SIZE, info.RegionSize); + ok(info.State == MEM_RESERVE, "State should have been MEM_RESERVE instead of 0x%x\n", info.State); + ok(info.Protect == 0, "Protect should have been 0 instead of 0x%x\n", info.Protect); + ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); ptr = VirtualAlloc(ptr, 0x10000, MEM_COMMIT, PAGE_READONLY); ok(ptr != NULL, "VirtualAlloc failed with error %d\n", GetLastError()); @@ -789,48 +758,35 @@ ok(info.RegionSize == 0x10000, "RegionSize should have been 0x10000 but was 0x%lx\n", info.RegionSize); ok(info.State == MEM_COMMIT, "State should have been MEM_COMMIT instead of 0x%x\n", info.State); ok(info.Protect == PAGE_READONLY, "Protect should have been PAGE_READONLY instead of 0x%x\n", info.Protect); - if (info.Type == MEM_PRIVATE) /* win9x is different for uncommitted mappings */ - { - ok(info.AllocationProtect == PAGE_NOACCESS, - "AllocationProtect should have been PAGE_NOACCESS but was 0x%x\n", info.AllocationProtect); - } - else - { - ok(info.AllocationProtect == PAGE_READWRITE, - "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); - ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); - } + ok(info.AllocationProtect == PAGE_READWRITE, + "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); + ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); /* shows that the VirtualAlloc above affects the mapping, not just the * virtual memory in this process - it also affects all other processes * with a view of the mapping, but that isn't tested here */ - if (ptr != ptr2) - { - ret = VirtualQuery(ptr2, &info, sizeof(info)); - ok(ret, "VirtualQuery failed with error %d\n", GetLastError()); - ok(info.BaseAddress == ptr2, - "BaseAddress should have been %p but was %p instead\n", ptr2, info.BaseAddress); - ok(info.AllocationBase == ptr2, - "AllocationBase should have been %p but was %p instead\n", ptr2, info.AllocationBase); - ok(info.AllocationProtect == PAGE_READWRITE, - "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); - ok(info.RegionSize == 0x10000, - "RegionSize should have been 0x10000 but was 0x%lx\n", info.RegionSize); - ok(info.State == MEM_COMMIT, - "State should have been MEM_COMMIT instead of 0x%x\n", info.State); - ok(info.Protect == PAGE_READWRITE, - "Protect should have been PAGE_READWRITE instead of 0x%x\n", info.Protect); - ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); - } + ret = VirtualQuery(ptr2, &info, sizeof(info)); + ok(ret, "VirtualQuery failed with error %d\n", GetLastError()); + ok(info.BaseAddress == ptr2, + "BaseAddress should have been %p but was %p instead\n", ptr2, info.BaseAddress); + ok(info.AllocationBase == ptr2, + "AllocationBase should have been %p but was %p instead\n", ptr2, info.AllocationBase); + ok(info.AllocationProtect == PAGE_READWRITE, + "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); + ok(info.RegionSize == 0x10000, + "RegionSize should have been 0x10000 but was 0x%lx\n", info.RegionSize); + ok(info.State == MEM_COMMIT, + "State should have been MEM_COMMIT instead of 0x%x\n", info.State); + ok(info.Protect == PAGE_READWRITE, + "Protect should have been PAGE_READWRITE instead of 0x%x\n", info.Protect); + ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); addr = VirtualAlloc( ptr, MAPPING_SIZE, MEM_RESET, PAGE_READONLY ); - ok( addr == ptr || broken(!addr && GetLastError() == ERROR_INVALID_PARAMETER), /* win9x */ - "VirtualAlloc failed with error %u\n", GetLastError() ); + ok( addr == ptr, "VirtualAlloc failed with error %u\n", GetLastError() ); ret = VirtualFree( ptr, 0x10000, MEM_DECOMMIT ); - ok( !ret || broken(ret) /* win9x */, "VirtualFree succeeded\n" ); - if (!ret) - ok( GetLastError() == ERROR_INVALID_PARAMETER, "VirtualFree failed with %u\n", GetLastError() ); + ok( !ret, "VirtualFree succeeded\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, "VirtualFree failed with %u\n", GetLastError() ); ret = UnmapViewOfFile(ptr2); ok(ret, "UnmapViewOfFile failed with error %d\n", GetLastError()); @@ -950,6 +906,15 @@ SetLastError(0xdeadbeef); ret = CloseHandle(map2); ok(ret, "CloseHandle error %d\n", GetLastError()); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, + sizeof(section_info), &info_size ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( info_size == sizeof(section_info), "NtQuerySection wrong size %u\n", info_size ); + ok( section_info.Attributes == SEC_FILE, "NtQuerySection wrong attr %08x\n", + section_info.Attributes ); + ok( section_info.BaseAddress == NULL, "NtQuerySection wrong base %p\n", section_info.BaseAddress ); + ok( section_info.Size.QuadPart == MAPPING_SIZE, "NtQuerySection wrong size %x%08x\n", + section_info.Size.u.HighPart, section_info.Size.u.LowPart ); SetLastError(0xdeadbeef); ret = CloseHandle(mapping); ok(ret, "CloseHandle error %d\n", GetLastError()); @@ -1013,30 +978,117 @@ ok(info.Type == 0, "%#x != 0\n", info.Type); mapping = CreateFileMappingA( file, NULL, PAGE_READONLY, 0, 12288, NULL ); - ok( mapping != 0, "CreateFileMappingA failed with error %u\n", GetLastError() ); + ok( mapping != NULL, "CreateFileMappingA failed with error %u\n", GetLastError() ); ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 12288 ); ok( ptr != NULL, "MapViewOfFile failed with error %u\n", GetLastError() ); ret = UnmapViewOfFile( (char *)ptr + 100 ); ok( ret, "UnmapViewOfFile failed with error %u\n", GetLastError() ); - if (!ret) UnmapViewOfFile( ptr ); ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 12288 ); ok( ptr != NULL, "MapViewOfFile failed with error %u\n", GetLastError() ); ret = UnmapViewOfFile( (char *)ptr + 4096 ); ok( ret, "UnmapViewOfFile failed with error %u\n", GetLastError() ); - if (!ret) UnmapViewOfFile( ptr ); ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 12288 ); ok( ptr != NULL, "MapViewOfFile failed with error %u\n", GetLastError() ); ret = UnmapViewOfFile( (char *)ptr + 4096 + 100 ); ok( ret, "UnmapViewOfFile failed with error %u\n", GetLastError() ); - if (!ret) UnmapViewOfFile( ptr ); CloseHandle(mapping); + + mapping = CreateFileMappingA( file, NULL, PAGE_READONLY, 0, 36, NULL ); + ok( mapping != NULL, "CreateFileMappingA failed with error %u\n", GetLastError() ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, + sizeof(section_info), &info_size ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( info_size == sizeof(section_info), "NtQuerySection wrong size %u\n", info_size ); + ok( section_info.Attributes == SEC_FILE, "NtQuerySection wrong attr %08x\n", + section_info.Attributes ); + ok( section_info.BaseAddress == NULL, "NtQuerySection wrong base %p\n", section_info.BaseAddress ); + ok( section_info.Size.QuadPart == 36, "NtQuerySection wrong size %x%08x\n", + section_info.Size.u.HighPart, section_info.Size.u.LowPart ); + CloseHandle(mapping); + + SetFilePointer(file, 0x3456, NULL, FILE_BEGIN); + SetEndOfFile(file); + mapping = CreateFileMappingA( file, NULL, PAGE_READONLY, 0, 0, NULL ); + ok( mapping != NULL, "CreateFileMappingA failed with error %u\n", GetLastError() ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, + sizeof(section_info), &info_size ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( info_size == sizeof(section_info), "NtQuerySection wrong size %u\n", info_size ); + ok( section_info.Attributes == SEC_FILE, "NtQuerySection wrong attr %08x\n", + section_info.Attributes ); + ok( section_info.BaseAddress == NULL, "NtQuerySection wrong base %p\n", section_info.BaseAddress ); + ok( section_info.Size.QuadPart == 0x3456, "NtQuerySection wrong size %x%08x\n", + section_info.Size.u.HighPart, section_info.Size.u.LowPart ); + CloseHandle(mapping); + + map_size.QuadPart = 0x3457; + status = pNtCreateSection( &mapping, SECTION_QUERY | SECTION_MAP_READ, NULL, + &map_size, PAGE_READONLY, SEC_COMMIT, file ); + ok( status == STATUS_SECTION_TOO_BIG, "NtCreateSection failed %x\n", status ); + status = pNtCreateSection( &mapping, SECTION_QUERY | SECTION_MAP_READ, NULL, + &map_size, PAGE_READONLY, SEC_IMAGE, file ); + ok( status == STATUS_INVALID_IMAGE_NOT_MZ, "NtCreateSection failed %x\n", status ); + if (!status) CloseHandle( mapping ); + map_size.QuadPart = 0x3452; + status = pNtCreateSection( &mapping, SECTION_QUERY | SECTION_MAP_READ, NULL, + &map_size, PAGE_READONLY, SEC_COMMIT, file ); + ok( !status, "NtCreateSection failed %x\n", status ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, sizeof(section_info), NULL ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( section_info.Attributes == SEC_FILE, "NtQuerySection wrong attr %08x\n", + section_info.Attributes ); + ok( section_info.BaseAddress == NULL, "NtQuerySection wrong base %p\n", section_info.BaseAddress ); + ok( section_info.Size.QuadPart == 0x3452, "NtQuerySection wrong size %x%08x\n", + section_info.Size.u.HighPart, section_info.Size.u.LowPart ); + size = map_size.QuadPart; + status = pNtMapViewOfSection( mapping, GetCurrentProcess(), &ptr, 0, 0, NULL, + &size, ViewShare, 0, PAGE_READONLY ); + ok( !status, "NtMapViewOfSection failed err %x\n", status ); + pNtUnmapViewOfSection( GetCurrentProcess(), ptr ); + size = map_size.QuadPart + 1; + status = pNtMapViewOfSection( mapping, GetCurrentProcess(), &ptr, 0, 0, NULL, + &size, ViewShare, 0, PAGE_READONLY ); + ok( status == STATUS_INVALID_VIEW_SIZE, "NtMapViewOfSection failed err %x\n", status ); + CloseHandle(mapping); + + status = pNtCreateSection( &mapping, SECTION_QUERY | SECTION_MAP_READ, NULL, + &map_size, PAGE_READONLY, SEC_COMMIT, 0 ); + ok( !status, "NtCreateSection failed %x\n", status ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, sizeof(section_info), NULL ); + ok( !status, "NtQuerySection failed err %x\n", status ); + ok( section_info.Attributes == SEC_COMMIT, "NtQuerySection wrong attr %08x\n", + section_info.Attributes ); + ok( section_info.BaseAddress == NULL, "NtQuerySection wrong base %p\n", section_info.BaseAddress ); + ok( section_info.Size.QuadPart == 0x4000, "NtQuerySection wrong size %x%08x\n", + section_info.Size.u.HighPart, section_info.Size.u.LowPart ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, sizeof(section_info)-1, NULL ); + ok( status == STATUS_INFO_LENGTH_MISMATCH, "NtQuerySection failed err %x\n", status ); + status = pNtQuerySection( mapping, SectionBasicInformation, §ion_info, sizeof(section_info)+1, NULL ); + ok( !status, "NtQuerySection failed err %x\n", status ); + status = pNtQuerySection( mapping, SectionImageInformation, &image_info, sizeof(image_info)-1, NULL ); + ok( status == STATUS_INFO_LENGTH_MISMATCH, "NtQuerySection failed err %x\n", status ); + status = pNtQuerySection( mapping, SectionImageInformation, &image_info, sizeof(image_info), NULL ); + ok( status == STATUS_SECTION_NOT_IMAGE, "NtQuerySection failed err %x\n", status ); + status = pNtQuerySection( mapping, SectionImageInformation, &image_info, sizeof(image_info)+1, NULL ); + ok( status == STATUS_SECTION_NOT_IMAGE, "NtQuerySection failed err %x\n", status ); + CloseHandle(mapping); + + SetFilePointer(file, 0, NULL, FILE_BEGIN); + SetEndOfFile(file); + status = pNtCreateSection( &mapping, SECTION_QUERY | SECTION_MAP_READ, NULL, + NULL, PAGE_READONLY, SEC_COMMIT, file ); + ok( status == STATUS_MAPPED_FILE_SIZE_ZERO, "NtCreateSection failed %x\n", status ); + status = pNtCreateSection( &mapping, SECTION_QUERY | SECTION_MAP_READ, NULL, + NULL, PAGE_READONLY, SEC_IMAGE, file ); + ok( status == STATUS_INVALID_FILE_FOR_SECTION, "NtCreateSection failed %x\n", status ); + CloseHandle(file); DeleteFileA(testfile); } @@ -1413,8 +1465,7 @@ SetLastError(0xdeadbeef); handle2 = OpenFileMappingA( FILE_MAP_ALL_ACCESS, FALSE, "WINE TEST MAPPING"); ok( !handle2, "OpenFileMapping succeeded\n"); - ok( GetLastError() == ERROR_FILE_NOT_FOUND || GetLastError() == ERROR_INVALID_NAME /* win9x */, - "wrong error %u\n", GetLastError()); + ok( GetLastError() == ERROR_FILE_NOT_FOUND, "wrong error %u\n", GetLastError()); CloseHandle( handle ); } @@ -3868,7 +3919,6 @@ ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); ok(ret == sizeof(info.basic), "wrong returned size %u\n", ret); ok(info.basic.BaseAddress == NULL, "expected NULL, got %p\n", info.basic.BaseAddress); -todo_wine ok(info.basic.Attributes == SEC_FILE, "expected SEC_FILE, got %#x\n", info.basic.Attributes); ok(info.basic.Size.QuadPart == fsize, "expected %#lx, got %#x/%08x\n", fsize, info.basic.Size.HighPart, info.basic.Size.LowPart); @@ -3884,6 +3934,87 @@ nt = image_nt_header(p); image_size = ROUND_SIZE(p, nt->OptionalHeader.SizeOfImage); + + memset(&info, 0x55, sizeof(info)); + ret = 0xdeadbeef; + status = pNtQuerySection(mapping, SectionBasicInformation, &info, sizeof(info), &ret); + ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); + ok(ret == sizeof(info.basic), "wrong returned size %u\n", ret); + ok(info.basic.BaseAddress == NULL, "expected NULL, got %p\n", info.basic.BaseAddress); + ok(info.basic.Attributes == SEC_FILE, "expected SEC_FILE, got %#x\n", info.basic.Attributes); + ok(info.basic.Size.QuadPart == fsize, "expected %#lx, got %#x/%08x\n", fsize, info.basic.Size.HighPart, info.basic.Size.LowPart); + + UnmapViewOfFile(p); + CloseHandle(mapping); + + SetLastError(0xdeadbef); + mapping = CreateFileMappingA(file, NULL, PAGE_EXECUTE_READ|SEC_IMAGE, 0, 0, NULL); + /* NT4 and win2k don't support EXEC on file mappings */ + if (!mapping) + mapping = CreateFileMappingA(file, NULL, PAGE_READONLY|SEC_IMAGE, 0, 0, NULL); + ok(mapping != 0, "CreateFileMapping error %u\n", GetLastError()); + + memset(&info, 0x55, sizeof(info)); + ret = 0xdeadbeef; + status = pNtQuerySection(mapping, SectionBasicInformation, &info, sizeof(info), &ret); + ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); + ok(ret == sizeof(info.basic), "wrong returned size %u\n", ret); + ok(info.basic.BaseAddress == NULL, "expected NULL, got %p\n", info.basic.BaseAddress); + ok(info.basic.Attributes == (SEC_FILE|SEC_IMAGE), "expected SEC_FILE|SEC_IMAGE, got %#x\n", info.basic.Attributes); + ok(info.basic.Size.QuadPart == image_size, "expected %#lx, got %#x/%08x\n", image_size, info.basic.Size.HighPart, info.basic.Size.LowPart); + + status = pNtQuerySection(mapping, SectionImageInformation, NULL, sizeof(info), &ret); + ok(status == STATUS_ACCESS_VIOLATION, "expected STATUS_ACCESS_VIOLATION, got %#x\n", status); + + status = pNtQuerySection(mapping, SectionImageInformation, &info, 0, NULL); + ok(status == STATUS_INFO_LENGTH_MISMATCH, "expected STATUS_INFO_LENGTH_MISMATCH, got %#x\n", status); + + status = pNtQuerySection(mapping, SectionImageInformation, &info, 0, &ret); + ok(status == STATUS_INFO_LENGTH_MISMATCH, "expected STATUS_INFO_LENGTH_MISMATCH, got %#x\n", status); + + status = pNtQuerySection(mapping, SectionImageInformation, &info, sizeof(info.basic), &ret); + ok(status == STATUS_INFO_LENGTH_MISMATCH, "expected STATUS_INFO_LENGTH_MISMATCH, got %#x\n", status); + + SetLastError(0xdeadbef); + p = MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0); + ok(p != NULL, "MapViewOfFile error %u\n", GetLastError()); + + nt = image_nt_header(p); + + memset(&info, 0x55, sizeof(info)); + ret = 0xdeadbeef; + status = pNtQuerySection(mapping, SectionImageInformation, &info, sizeof(info), &ret); + ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); + ok(ret == sizeof(info.image), "wrong returned size %u\n", ret); + ok((ULONG_PTR)info.image.TransferAddress == nt->OptionalHeader.ImageBase + nt->OptionalHeader.AddressOfEntryPoint, + "expected %#lx, got %p\n", (SIZE_T)(nt->OptionalHeader.ImageBase + nt->OptionalHeader.AddressOfEntryPoint), info.image.TransferAddress); + ok(info.image.ZeroBits == 0, "expected 0, got %#x\n", info.image.ZeroBits); + ok(info.image.MaximumStackSize == nt->OptionalHeader.SizeOfStackReserve, "expected %#lx, got %#lx\n", (SIZE_T)nt->OptionalHeader.SizeOfStackReserve, info.image.MaximumStackSize); + ok(info.image.CommittedStackSize == nt->OptionalHeader.SizeOfStackCommit, "expected %#lx, got %#lx\n", (SIZE_T)nt->OptionalHeader.SizeOfStackCommit, info.image.CommittedStackSize); + ok(info.image.SubSystemType == nt->OptionalHeader.Subsystem, "expected %#x, got %#x\n", nt->OptionalHeader.Subsystem, info.image.SubSystemType); + ok(info.image.SubsystemVersionLow == nt->OptionalHeader.MinorSubsystemVersion, "expected %#x, got %#x\n", nt->OptionalHeader.MinorSubsystemVersion, info.image.SubsystemVersionLow); + ok(info.image.SubsystemVersionHigh == nt->OptionalHeader.MajorSubsystemVersion, "expected %#x, got %#x\n", nt->OptionalHeader.MajorSubsystemVersion, info.image.SubsystemVersionHigh); + ok(info.image.ImageCharacteristics == nt->FileHeader.Characteristics, "expected %#x, got %#x\n", nt->FileHeader.Characteristics, info.image.ImageCharacteristics); + ok(info.image.DllCharacteristics == nt->OptionalHeader.DllCharacteristics, "expected %#x, got %#x\n", nt->OptionalHeader.DllCharacteristics, info.image.DllCharacteristics); + ok(info.image.Machine == nt->FileHeader.Machine, "expected %#x, got %#x\n", nt->FileHeader.Machine, info.image.Machine); +todo_wine + ok(info.image.ImageContainsCode == TRUE, "expected 1, got %#x\n", info.image.ImageContainsCode); + + memset(&info, 0x55, sizeof(info)); + ret = 0xdeadbeef; + status = pNtQuerySection(mapping, SectionBasicInformation, &info, sizeof(info), &ret); + ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); + ok(ret == sizeof(info.basic), "wrong returned size %u\n", ret); + ok(info.basic.BaseAddress == NULL, "expected NULL, got %p\n", info.basic.BaseAddress); + ok(info.basic.Attributes == (SEC_FILE|SEC_IMAGE), "expected SEC_FILE|SEC_IMAGE, got %#x\n", info.basic.Attributes); + ok(info.basic.Size.QuadPart == image_size, "expected %#lx, got %#x/%08x\n", image_size, info.basic.Size.HighPart, info.basic.Size.LowPart); + + UnmapViewOfFile(p); + CloseHandle(mapping); + + SetLastError(0xdeadbef); + mapping = CreateFileMappingA(file, NULL, PAGE_READONLY|SEC_COMMIT|SEC_NOCACHE, 0, 0, NULL); + ok(mapping != 0, "CreateFileMapping error %u\n", GetLastError()); memset(&info, 0x55, sizeof(info)); ret = 0xdeadbeef; @@ -3895,14 +4026,10 @@ ok(info.basic.Attributes == SEC_FILE, "expected SEC_FILE, got %#x\n", info.basic.Attributes); ok(info.basic.Size.QuadPart == fsize, "expected %#lx, got %#x/%08x\n", fsize, info.basic.Size.HighPart, info.basic.Size.LowPart); - UnmapViewOfFile(p); CloseHandle(mapping); SetLastError(0xdeadbef); - mapping = CreateFileMappingA(file, NULL, PAGE_EXECUTE_READ|SEC_IMAGE, 0, 0, NULL); - /* NT4 and win2k don't support EXEC on file mappings */ - if (!mapping) - mapping = CreateFileMappingA(file, NULL, PAGE_READONLY|SEC_IMAGE, 0, 0, NULL); + mapping = CreateFileMappingA(file, NULL, PAGE_READONLY|SEC_RESERVE, 0, 0, NULL); ok(mapping != 0, "CreateFileMapping error %u\n", GetLastError()); memset(&info, 0x55, sizeof(info)); @@ -3911,88 +4038,6 @@ ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); ok(ret == sizeof(info.basic), "wrong returned size %u\n", ret); ok(info.basic.BaseAddress == NULL, "expected NULL, got %p\n", info.basic.BaseAddress); -todo_wine - ok(info.basic.Attributes == (SEC_FILE|SEC_IMAGE), "expected SEC_FILE|SEC_IMAGE, got %#x\n", info.basic.Attributes); - ok(info.basic.Size.QuadPart == image_size, "expected %#lx, got %#x/%08x\n", image_size, info.basic.Size.HighPart, info.basic.Size.LowPart); - - status = pNtQuerySection(mapping, SectionImageInformation, NULL, sizeof(info), &ret); - ok(status == STATUS_ACCESS_VIOLATION, "expected STATUS_ACCESS_VIOLATION, got %#x\n", status); - - status = pNtQuerySection(mapping, SectionImageInformation, &info, 0, NULL); - ok(status == STATUS_INFO_LENGTH_MISMATCH, "expected STATUS_INFO_LENGTH_MISMATCH, got %#x\n", status); - - status = pNtQuerySection(mapping, SectionImageInformation, &info, 0, &ret); - ok(status == STATUS_INFO_LENGTH_MISMATCH, "expected STATUS_INFO_LENGTH_MISMATCH, got %#x\n", status); - - status = pNtQuerySection(mapping, SectionImageInformation, &info, sizeof(info.basic), &ret); - ok(status == STATUS_INFO_LENGTH_MISMATCH, "expected STATUS_INFO_LENGTH_MISMATCH, got %#x\n", status); - - SetLastError(0xdeadbef); - p = MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0); - ok(p != NULL, "MapViewOfFile error %u\n", GetLastError()); - - nt = image_nt_header(p); - - memset(&info, 0x55, sizeof(info)); - ret = 0xdeadbeef; - status = pNtQuerySection(mapping, SectionImageInformation, &info, sizeof(info), &ret); - ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); - ok(ret == sizeof(info.image), "wrong returned size %u\n", ret); - ok((ULONG_PTR)info.image.TransferAddress == nt->OptionalHeader.ImageBase + nt->OptionalHeader.AddressOfEntryPoint, - "expected %#lx, got %p\n", (SIZE_T)(nt->OptionalHeader.ImageBase + nt->OptionalHeader.AddressOfEntryPoint), info.image.TransferAddress); - ok(info.image.ZeroBits == 0, "expected 0, got %#x\n", info.image.ZeroBits); -todo_wine - ok(info.image.MaximumStackSize == nt->OptionalHeader.SizeOfStackReserve, "expected %#lx, got %#lx\n", (SIZE_T)nt->OptionalHeader.SizeOfStackReserve, info.image.MaximumStackSize); -todo_wine - ok(info.image.CommittedStackSize == nt->OptionalHeader.SizeOfStackCommit, "expected %#lx, got %#lx\n", (SIZE_T)nt->OptionalHeader.SizeOfStackCommit, info.image.CommittedStackSize); - ok(info.image.SubSystemType == nt->OptionalHeader.Subsystem, "expected %#x, got %#x\n", nt->OptionalHeader.Subsystem, info.image.SubSystemType); - ok(info.image.SubsystemVersionLow == nt->OptionalHeader.MinorSubsystemVersion, "expected %#x, got %#x\n", nt->OptionalHeader.MinorSubsystemVersion, info.image.SubsystemVersionLow); - ok(info.image.SubsystemVersionHigh == nt->OptionalHeader.MajorSubsystemVersion, "expected %#x, got %#x\n", nt->OptionalHeader.MajorSubsystemVersion, info.image.SubsystemVersionHigh); - ok(info.image.ImageCharacteristics == nt->FileHeader.Characteristics, "expected %#x, got %#x\n", nt->FileHeader.Characteristics, info.image.ImageCharacteristics); - ok(info.image.DllCharacteristics == nt->OptionalHeader.DllCharacteristics, "expected %#x, got %#x\n", nt->OptionalHeader.DllCharacteristics, info.image.DllCharacteristics); - ok(info.image.Machine == nt->FileHeader.Machine, "expected %#x, got %#x\n", nt->FileHeader.Machine, info.image.Machine); - ok(info.image.ImageContainsCode == TRUE, "expected 1, got %#x\n", info.image.ImageContainsCode); - - memset(&info, 0x55, sizeof(info)); - ret = 0xdeadbeef; - status = pNtQuerySection(mapping, SectionBasicInformation, &info, sizeof(info), &ret); - ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); - ok(ret == sizeof(info.basic), "wrong returned size %u\n", ret); - ok(info.basic.BaseAddress == NULL, "expected NULL, got %p\n", info.basic.BaseAddress); -todo_wine - ok(info.basic.Attributes == (SEC_FILE|SEC_IMAGE), "expected SEC_FILE|SEC_IMAGE, got %#x\n", info.basic.Attributes); - ok(info.basic.Size.QuadPart == image_size, "expected %#lx, got %#x/%08x\n", image_size, info.basic.Size.HighPart, info.basic.Size.LowPart); - - UnmapViewOfFile(p); - CloseHandle(mapping); - - SetLastError(0xdeadbef); - mapping = CreateFileMappingA(file, NULL, PAGE_READONLY|SEC_COMMIT|SEC_NOCACHE, 0, 0, NULL); - ok(mapping != 0, "CreateFileMapping error %u\n", GetLastError()); - - memset(&info, 0x55, sizeof(info)); - ret = 0xdeadbeef; - status = pNtQuerySection(mapping, SectionBasicInformation, &info, sizeof(info), &ret); - ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); - ok(ret == sizeof(info.basic), "wrong returned size %u\n", ret); - ok(info.basic.BaseAddress == NULL, "expected NULL, got %p\n", info.basic.BaseAddress); -todo_wine - ok(info.basic.Attributes == SEC_FILE, "expected SEC_FILE, got %#x\n", info.basic.Attributes); - ok(info.basic.Size.QuadPart == fsize, "expected %#lx, got %#x/%08x\n", fsize, info.basic.Size.HighPart, info.basic.Size.LowPart); - - CloseHandle(mapping); - - SetLastError(0xdeadbef); - mapping = CreateFileMappingA(file, NULL, PAGE_READONLY|SEC_RESERVE, 0, 0, NULL); - ok(mapping != 0, "CreateFileMapping error %u\n", GetLastError()); - - memset(&info, 0x55, sizeof(info)); - ret = 0xdeadbeef; - status = pNtQuerySection(mapping, SectionBasicInformation, &info, sizeof(info), &ret); - ok(status == STATUS_SUCCESS, "NtQuerySection error %#x\n", status); - ok(ret == sizeof(info.basic), "wrong returned size %u\n", ret); - ok(info.basic.BaseAddress == NULL, "expected NULL, got %p\n", info.basic.BaseAddress); -todo_wine ok(info.basic.Attributes == SEC_FILE, "expected SEC_FILE, got %#x\n", info.basic.Attributes); ok(info.basic.Size.QuadPart == fsize, "expected %#lx, got %#x/%08x\n", fsize, info.basic.Size.HighPart, info.basic.Size.LowPart); @@ -4064,14 +4109,7 @@ } if (!strcmp(argv[2], "sharedmemro")) { - if(!winetest_interactive) - { - skip("CORE-8541: Skipping test_shared_memory_ro(TRUE, strtol(argv[3], NULL, 16))\n"); - } - else - { - test_shared_memory_ro(TRUE, strtol(argv[3], NULL, 16)); - } + test_shared_memory_ro(TRUE, strtol(argv[3], NULL, 16)); return; } while (1) @@ -4099,11 +4137,12 @@ pGetProcessDEPPolicy = (void *)GetProcAddress( hkernel32, "GetProcessDEPPolicy" ); pIsWow64Process = (void *)GetProcAddress( hkernel32, "IsWow64Process" ); pNtAreMappedFilesTheSame = (void *)GetProcAddress( hntdll, "NtAreMappedFilesTheSame" ); + pNtCreateSection = (void *)GetProcAddress( hntdll, "NtCreateSection" ); pNtMapViewOfSection = (void *)GetProcAddress( hntdll, "NtMapViewOfSection" ); pNtUnmapViewOfSection = (void *)GetProcAddress( hntdll, "NtUnmapViewOfSection" ); + pNtQuerySection = (void *)GetProcAddress( hntdll, "NtQuerySection" ); pRtlAddVectoredExceptionHandler = (void *)GetProcAddress( hntdll, "RtlAddVectoredExceptionHandler" ); pRtlRemoveVectoredExceptionHandler = (void *)GetProcAddress( hntdll, "RtlRemoveVectoredExceptionHandler" ); - pNtQuerySection = (void *)GetProcAddress( hntdll, "NtQuerySection" ); pNtProtectVirtualMemory = (void *)GetProcAddress( hntdll, "NtProtectVirtualMemory" ); pNtAllocateVirtualMemory = (void *)GetProcAddress( hntdll, "NtAllocateVirtualMemory" ); pNtFreeVirtualMemory = (void *)GetProcAddress( hntdll, "NtFreeVirtualMemory" );
8 years, 2 months
1
0
0
0
[akhaldi] 72252: [GDI32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:19:56 2016 New Revision: 72252 URL:
http://svn.reactos.org/svn/reactos?rev=72252&view=rev
Log: [GDI32_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866 Modified: trunk/rostests/winetests/gdi32/brush.c trunk/rostests/winetests/gdi32/dib.c trunk/rostests/winetests/gdi32/font.c Modified: trunk/rostests/winetests/gdi32/brush.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/brush.c?r…
============================================================================== --- trunk/rostests/winetests/gdi32/brush.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdi32/brush.c [iso-8859-1] Thu Aug 18 09:19:56 2016 @@ -23,6 +23,7 @@ #include "windef.h" #include "winbase.h" #include "wingdi.h" +#include "winuser.h" #include "wine/test.h" @@ -343,10 +344,28 @@ DeleteObject( palette2 ); } +static void test_brush_org( void ) +{ + HDC hdc = GetDC( 0 ); + POINT old, pt; + + SetBrushOrgEx( hdc, 0, 0, &old ); + + SetBrushOrgEx( hdc, 1, 1, &pt ); + ok( pt.x == 0 && pt.y == 0, "got %d,%d\n", pt.x, pt.y ); + SetBrushOrgEx( hdc, 0x10000, -1, &pt ); + ok( pt.x == 1 && pt.y == 1, "got %d,%d\n", pt.x, pt.y ); + SetBrushOrgEx( hdc, old.x, old.y, &pt ); + ok( pt.x == 0x10000 && pt.y == -1, "got %d,%d\n", pt.x, pt.y ); + + ReleaseDC( 0, hdc ); +} + START_TEST(brush) { test_solidbrush(); test_hatch_brush(); test_pattern_brush(); test_palette_brush(); -} + test_brush_org(); +} Modified: trunk/rostests/winetests/gdi32/dib.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/dib.c?rev…
============================================================================== --- trunk/rostests/winetests/gdi32/dib.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdi32/dib.c [iso-8859-1] Thu Aug 18 09:19:56 2016 @@ -120,7 +120,7 @@ "94645300d6eb51020a7ef8261dee2941cd51b5df", "c56f5bdc9cac4f0bc81c33295d9aed8eaf4cb1f2", "21cdfde38ac7edbb241ec83d82f31286e90c4629", - "1fd2f4dcb62f8522171872e43fd4a35041d68100", + "0e6fc62522b0d6d2019f826ac0b586b91bd0d4fe", "68c18db6abfda626cab12d198298d4c39264bfbc", "6b59ae6c20749020ad43175e05110dc33b6a59b5", "39c31de73aafcfcadf0bf414da4495be9de54417", @@ -193,7 +193,7 @@ "94645300d6eb51020a7ef8261dee2941cd51b5df", "c56f5bdc9cac4f0bc81c33295d9aed8eaf4cb1f2", "21cdfde38ac7edbb241ec83d82f31286e90c4629", - "1fd2f4dcb62f8522171872e43fd4a35041d68100", + "0e6fc62522b0d6d2019f826ac0b586b91bd0d4fe", "68c18db6abfda626cab12d198298d4c39264bfbc", "6b59ae6c20749020ad43175e05110dc33b6a59b5", "39c31de73aafcfcadf0bf414da4495be9de54417", @@ -266,7 +266,7 @@ "19b32a0daa91201725b5e13820c343d0a84ff698", "abca6a80a99b05722d2d87ce2a8b94ef1ae549e1", "2ba70994d0b4ce87fdf6fbc33ada11252178061e", - "7b4e1d47a03e2cec236d8fb6e2ae89d8ed078f79", + "9b81ccc2d956d1de019085f971ba19435fe5feae", "075c4cb50e2cf96ab5d132c9f7bb1c1deb4735bd", "8566c1110ab5cb8f754787b47923c8bff38f790c", "89e90d6159d59886bbbf0c40a7cd01293c3cfda3", @@ -339,7 +339,7 @@ "5f629ab51719dd0ca5a67d880eb2631f5b598a7b", "1ceb85697f649a62b1753438daa14944af7f450c", "98ce4dbc04eb48fa0f96ef813db5b4dfa1b2dd39", - "3addb9ccd8f56fc0825f61b1b5af67d3297f4ded", + "1cb0c7d9d89cdbce7b47d19ef0365bb6b2adc831", "f00bac7e18827cfb264fae2e8a0da17b9db18d52", "63c1c6c63e82f3b8bd977a1381b248e05321394d", "ada202d2f526f6995f83412479891c1764b66e5a", @@ -412,7 +412,7 @@ "3d27002f4fe3c943468b7e3ef6985962c41ac8dc", "3231c4d87faefb7ec5bd377613969c05b70343fc", "00394e438e9edde978e88602c9ad2a572e965bf6", - "e760be69cb37c7be35d5968d7a294e1fd49d4f66", + "c0c41390270ba082ee8211576fee39c676813c42", "996fb708ddc4b94eb8d1585bd83a5c8a1e2633ba", "caa39eb482e8fc2e00f1c6737735c023ac9363ef", "c1250ff2b67e6d2a8baccc5c93f8f5ad933c5c4f", @@ -485,7 +485,7 @@ "b0a959745b2db1d9f449e68e4479a4f36301879c", "63f764b9bd2f4876ab1ee0f3c0eb55b5a7de5212", "e171f6ec77bca91d6b8559911bce296c0bac469e", - "9725669042ef68acb408404d196496d10340bb5a", + "33bb75c12f083d799d287fe9caddedbb3892e6fa", "26e7e1c300ba0c5aaaef03eeb71d529f6def9289", "b1f602d2a74095cc0115ae2ae07b642498e6c0fc", "03d5eb8e3a6662e6dc183f88ee2f285065fc9c51", @@ -557,7 +557,7 @@ "a8d6a5285a927ba3a3be34b06a06c70a20d4c1b3", "e428d213ad02651287894f093413949dcb369208", "7df915bedcc5951a1b6f828490f7dbb93212e835", - "645dc251d205139282b17eb7bece1055fff3bcd0", + "8720478d904a84c24071e97c731c1ba7882b131e", "76215275593631f5900aad3616d725733dc39493", "81655a550703849a616d4a16504bb9c6f999285f", "573d65665d20f00d36d9782ae2b89772140524ab", @@ -634,7 +634,7 @@ "957a86fbe8a96dd068db65e4e624a52bcc84af46", "13b0f240054dc57ba0e2dfde74048496304a2c7f", "51ef267eb9c15487c9430f505e8a6c929eb2170c", - "1b593d8e031d3b37fecf6f1df5a8f96c8e8bfef8", + "60c0752f592c6426a2f4a71173b44c5c086f4f2a", "9dd123938b0a02601d8d458ecbd6535ddefea724", "815a1e4fc7f3a00c2990c150e87eba0b13f66811", "75ae8c80af4356a1a5eebde6608fbc31e8a95372", @@ -706,7 +706,7 @@ "3b7488731da48635d86be551ab7c8c0f91c78219", "4fd49cb49853ef950fd0b7e2e35718a71c8374c7", "e15a355fc09bfd22267917898e2266168ff410e3", - "b9688566bddf18586787c00e68724e51e97dfb72", + "7a9c326a56a94621377a7258be70ba50042ca9a2", "5e38e03310f1c66f2052af2a745d8c60515707c5", "f994fb5019bf4c1a96eccf89af599eae0aa6b412", "3a71ad6fef147067641e49a5f69b2454e3a5010d", @@ -788,7 +788,7 @@ "24caede65b40815a60b83c4edfa06bdc542388cd", "650a51bedd1af92469d2950eb95220db35f95c6e", "3f43aa11e6fccb747cc13224583fb2f951fee08c", - "04cea9753b575ecce8e55357eddfcec10ddfbbea", + "b83f78ae85df87fc7af565db276c60c102274f20", "6b6f4b97f05e015eb37a5f6aff637235feacd030", "1bd06e4e11929e5e91c3c9f20def639b20e731e8", "d63a6086547e90d2ba84aaebfeae24f3ba0c04f1", @@ -867,7 +867,7 @@ "ea39ac62ca2f815a1d029340c6465994b6f03cb0", "9a603513cd81acf70cf8b27b0d544e7f672e9d40", "f4a334e69535de74ee5ed54be93a75120a66e54a", - "559fd1d15447745527c61fe43a94c6708bff3e39", + "f751a55fb738b63b6fd7c229c33ef92605d0c9c1", "995f77f2f53398399f09d1365cb4dfd105764e5c", "61907a6685bba93077da40cfb28cf2ab74552fd2", "122015e5e17c1c317c6e51c0e207826b606a4077", @@ -943,7 +943,7 @@ "b672afbeeafb44194a821f0def81a8892872937e", "db0124045882b598feea192186cf7eb7a0387866", "602d91471378fe24a2d0248bd8a92b624f099fea", - "e772873b87a0f55ea51a3da323f64bf8814c6703", + "c93a86adfe58dc2d461f2ed962883d6b90888848", "21aa1ff238a2d78efed1aa658ac8fe21b1e64daa", "1a579cd280422131c35e907a023ee0e80749b5a4", "bbf027f506cbb80d359bf4892fcb75f816f2e446", @@ -1015,7 +1015,7 @@ "9c0da52c4ceaa8fdfcff7351328dd520bb57e985", "f8224430462f6a93f85ef33b8aa7299525990708", "1cf93cecc942b41ab8fae21ea18418a6d64873e5", - "d58b8760ef01c12e691651c932d683c66fde3654", + "71a1705ee14068ee8c6c6680c1bd99703fb6abd7", "94438c82b8812fe81a69d5d1429c5967cdbfed7a", "764ea26f10fe11f7bdb538a26fc33d44b3a95d6d", "94ad53c578f6034dfc5c666e363203cdfb00f2cc", @@ -1105,7 +1105,7 @@ "be36cda370650e6d5fb0570aeb8ced491d0c2b1c", "4c34cb8e47f9ff4b4348aa2d40cce7cb54d65cb0", "18f4497e43903e8df5b27da4ceebf62b15550a87", - "3fa3570a2ebd38042b90f24bd3496233bca5a23d", + "399e988c922b7fad1c8f6907541c5dda65e60408", "2fcd25c2d19a01fa631fd19135d9f28b26b86259", "655cfadeb157233c804d42b58195569c8846e3c1", "65c8811c609203fd424f5ed5f92ca2268a1dca54", @@ -1179,7 +1179,7 @@ { 10, 10, 110, 110 }, { 10, 10, 120, 110 }, { 10, 10, 110, 120 }, - { 100, 100, 356, 356 }, + { 0, 4, 356, 356 }, { 100, 100, 356, 356 }, { 50, 50, 306, 306 }, { 100, 100, 356, 356 }, @@ -2185,6 +2185,18 @@ } BitBlt( hdc, 100, 100, 256, 256, src_dc, 0, 0, SRCCOPY ); + + /* Interesting cases for 1-bpp dst */ + BitBlt( hdc, 1, 4, 2, 2, src_dc, 0, 0, SRCCOPY ); + BitBlt( hdc, 1, 8, 16, 2, src_dc, 0, 0, SRCCOPY ); + BitBlt( hdc, 1, 12, 15, 2, src_dc, 0, 0, SRCCOPY ); + BitBlt( hdc, 0, 16, 8, 2, src_dc, 0, 0, SRCCOPY ); + BitBlt( hdc, 0, 20, 9, 2, src_dc, 0, 0, SRCCOPY ); + BitBlt( hdc, 7, 24, 1, 2, src_dc, 0, 0, SRCCOPY ); + BitBlt( hdc, 7, 28, 2, 2, src_dc, 0, 0, SRCCOPY ); + BitBlt( hdc, 7, 32, 9, 2, src_dc, 0, 0, SRCCOPY ); + BitBlt( hdc, 7, 36, 10, 2, src_dc, 0, 0, SRCCOPY ); + if (bmi->bmiHeader.biBitCount == 8) /* broken on NT4 */ compare_hash_broken_todo(hdc, bmi, bits, "BitBlt src 32-bpp SRCCOPY", 1, FALSE ); else Modified: trunk/rostests/winetests/gdi32/font.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/font.c?re…
============================================================================== --- trunk/rostests/winetests/gdi32/font.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdi32/font.c [iso-8859-1] Thu Aug 18 09:19:56 2016 @@ -2952,13 +2952,8 @@ ok(!efd.total, "no fonts should be enumerated for empty font_name\n"); for (i = 0; i < efd.total; i++) { -/* FIXME: remove completely once Wine is fixed */ -if (efd.lf[i].lfCharSet != font_charset) -{ -todo_wine - ok(efd.lf[i].lfCharSet == font_charset, "%d: got charset %d\n", i, efd.lf[i].lfCharSet); -} -else + /* FIXME: remove completely once Wine is fixed */ + todo_wine_if(efd.lf[i].lfCharSet != font_charset) ok(efd.lf[i].lfCharSet == font_charset, "%d: got charset %d\n", i, efd.lf[i].lfCharSet); ok(!strcmp(efd.lf[i].lfFaceName, font_name), "expected %s, got %s\n", font_name, efd.lf[i].lfFaceName);
8 years, 2 months
1
0
0
0
[akhaldi] 72251: [CMD_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:18:03 2016 New Revision: 72251 URL:
http://svn.reactos.org/svn/reactos?rev=72251&view=rev
Log: [CMD_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866 Modified: trunk/rostests/winetests/cmd/test_builtins.cmd.exp Modified: trunk/rostests/winetests/cmd/test_builtins.cmd.exp URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/cmd/test_builti…
============================================================================== --- trunk/rostests/winetests/cmd/test_builtins.cmd.exp [iso-8859-1] (original) +++ trunk/rostests/winetests/cmd/test_builtins.cmd.exp [iso-8859-1] Thu Aug 18 09:18:03 2016 @@ -980,7 +980,7 @@ a C r foo bar baz -@todo_wine@c:\ +c:\ ------ skip option c no output
8 years, 2 months
1
0
0
0
[akhaldi] 72250: [AMSTREAM_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:15:31 2016 New Revision: 72250 URL:
http://svn.reactos.org/svn/reactos?rev=72250&view=rev
Log: [AMSTREAM_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866 Modified: trunk/rostests/winetests/amstream/amstream.c Modified: trunk/rostests/winetests/amstream/amstream.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/amstream/amstre…
============================================================================== --- trunk/rostests/winetests/amstream/amstream.c [iso-8859-1] (original) +++ trunk/rostests/winetests/amstream/amstream.c [iso-8859-1] Thu Aug 18 09:15:31 2016 @@ -29,6 +29,8 @@ #include <winnls.h> #include <vfwmsgs.h> #include <objbase.h> +#include <mmreg.h> +#include <ksmedia.h> #include <initguid.h> #include <amstream.h> #include <dxsdk/uuids.h> @@ -600,6 +602,265 @@ IAMMultiMediaStream_Release(pams); } +static IUnknown *create_audio_data(void) +{ + IUnknown *audio_data = NULL; + HRESULT result = CoCreateInstance(&CLSID_AMAudioData, NULL, CLSCTX_INPROC_SERVER, + &IID_IUnknown, (void **)&audio_data); + ok(S_OK == result, "got 0x%08x\n", result); + return audio_data; +} + +static void test_audiodata_query_interface(void) +{ + IUnknown *unknown = create_audio_data(); + IMemoryData *memory_data = NULL; + IAudioData *audio_data = NULL; + + HRESULT result; + + result = IUnknown_QueryInterface(unknown, &IID_IMemoryData, (void **)&memory_data); + ok(E_NOINTERFACE == result, "got 0x%08x\n", result); + + result = IUnknown_QueryInterface(unknown, &IID_IAudioData, (void **)&audio_data); + ok(S_OK == result, "got 0x%08x\n", result); + if (S_OK == result) + { + result = IAudioData_QueryInterface(audio_data, &IID_IMemoryData, (void **)&memory_data); + ok(E_NOINTERFACE == result, "got 0x%08x\n", result); + + IAudioData_Release(audio_data); + } + + IUnknown_Release(unknown); +} + +static void test_audiodata_get_info(void) +{ + IUnknown *unknown = create_audio_data(); + IAudioData *audio_data = NULL; + + HRESULT result; + + result = IUnknown_QueryInterface(unknown, &IID_IAudioData, (void **)&audio_data); + if (FAILED(result)) + { + /* test_audiodata_query_interface handles this case */ + skip("No IAudioData\n"); + goto out_unknown; + } + + result = IAudioData_GetInfo(audio_data, NULL, NULL, NULL); + ok(MS_E_NOTINIT == result, "got 0x%08x\n", result); + + IAudioData_Release(audio_data); + +out_unknown: + IUnknown_Release(unknown); +} + +static void test_audiodata_set_buffer(void) +{ + IUnknown *unknown = create_audio_data(); + IAudioData *audio_data = NULL; + BYTE buffer[100] = {0}; + DWORD length = 0; + BYTE *data = NULL; + + HRESULT result; + + result = IUnknown_QueryInterface(unknown, &IID_IAudioData, (void **)&audio_data); + if (FAILED(result)) + { + /* test_audiodata_query_interface handles this case */ + skip("No IAudioData\n"); + goto out_unknown; + } + + result = IAudioData_SetBuffer(audio_data, 100, NULL, 0); + ok(S_OK == result, "got 0x%08x\n", result); + + data = (BYTE *)0xdeadbeef; + length = 0xdeadbeef; + result = IAudioData_GetInfo(audio_data, &length, &data, NULL); + ok(S_OK == result, "got 0x%08x\n", result); + ok(100 == length, "got %u\n", length); + ok(NULL != data, "got %p\n", data); + + result = IAudioData_SetBuffer(audio_data, 0, buffer, 0); + ok(E_INVALIDARG == result, "got 0x%08x\n", result); + + result = IAudioData_SetBuffer(audio_data, sizeof(buffer), buffer, 0); + ok(S_OK == result, "got 0x%08x\n", result); + + data = (BYTE *)0xdeadbeef; + length = 0xdeadbeef; + result = IAudioData_GetInfo(audio_data, &length, &data, NULL); + ok(S_OK == result, "got 0x%08x\n", result); + ok(sizeof(buffer) == length, "got %u\n", length); + ok(buffer == data, "got %p\n", data); + + IAudioData_Release(audio_data); + +out_unknown: + IUnknown_Release(unknown); +} + +static void test_audiodata_set_actual(void) +{ + IUnknown *unknown = create_audio_data(); + IAudioData *audio_data = NULL; + BYTE buffer[100] = {0}; + DWORD actual_data = 0; + + HRESULT result; + + result = IUnknown_QueryInterface(unknown, &IID_IAudioData, (void **)&audio_data); + if (FAILED(result)) + { + /* test_audiodata_query_interface handles this case */ + skip("No IAudioData\n"); + goto out_unknown; + } + + result = IAudioData_SetActual(audio_data, 0); + ok(S_OK == result, "got 0x%08x\n", result); + + result = IAudioData_SetBuffer(audio_data, sizeof(buffer), buffer, 0); + ok(S_OK == result, "got 0x%08x\n", result); + + result = IAudioData_SetActual(audio_data, sizeof(buffer) + 1); + ok(E_INVALIDARG == result, "got 0x%08x\n", result); + + result = IAudioData_SetActual(audio_data, sizeof(buffer)); + ok(S_OK == result, "got 0x%08x\n", result); + + actual_data = 0xdeadbeef; + result = IAudioData_GetInfo(audio_data, NULL, NULL, &actual_data); + ok(S_OK == result, "got 0x%08x\n", result); + ok(sizeof(buffer) == actual_data, "got %u\n", actual_data); + + result = IAudioData_SetActual(audio_data, 0); + ok(S_OK == result, "got 0x%08x\n", result); + + actual_data = 0xdeadbeef; + result = IAudioData_GetInfo(audio_data, NULL, NULL, &actual_data); + ok(S_OK == result, "got 0x%08x\n", result); + ok(0 == actual_data, "got %u\n", actual_data); + + IAudioData_Release(audio_data); + +out_unknown: + IUnknown_Release(unknown); +} + +static void test_audiodata_get_format(void) +{ + IUnknown *unknown = create_audio_data(); + IAudioData *audio_data = NULL; + WAVEFORMATEX wave_format = {0}; + + HRESULT result; + + result = IUnknown_QueryInterface(unknown, &IID_IAudioData, (void **)&audio_data); + if (FAILED(result)) + { + /* test_audiodata_query_interface handles this case */ + skip("No IAudioData\n"); + goto out_unknown; + } + + result = IAudioData_GetFormat(audio_data, NULL); + ok(E_POINTER == result, "got 0x%08x\n", result); + + wave_format.wFormatTag = 0xdead; + wave_format.nChannels = 0xdead; + wave_format.nSamplesPerSec = 0xdeadbeef; + wave_format.nAvgBytesPerSec = 0xdeadbeef; + wave_format.nBlockAlign = 0xdead; + wave_format.wBitsPerSample = 0xdead; + wave_format.cbSize = 0xdead; + result = IAudioData_GetFormat(audio_data, &wave_format); + ok(S_OK == result, "got 0x%08x\n", result); + ok(WAVE_FORMAT_PCM == wave_format.wFormatTag, "got %u\n", wave_format.wFormatTag); + ok(1 == wave_format.nChannels, "got %u\n", wave_format.nChannels); + ok(11025 == wave_format.nSamplesPerSec, "got %u\n", wave_format.nSamplesPerSec); + ok(22050 == wave_format.nAvgBytesPerSec, "got %u\n", wave_format.nAvgBytesPerSec); + ok(2 == wave_format.nBlockAlign, "got %u\n", wave_format.nBlockAlign); + ok(16 == wave_format.wBitsPerSample, "got %u\n", wave_format.wBitsPerSample); + ok(0 == wave_format.cbSize, "got %u\n", wave_format.cbSize); + + IAudioData_Release(audio_data); + +out_unknown: + IUnknown_Release(unknown); +} + +static void test_audiodata_set_format(void) +{ + IUnknown *unknown = create_audio_data(); + IAudioData *audio_data = NULL; + WAVEFORMATPCMEX wave_format = {{0}}; + + HRESULT result; + + result = IUnknown_QueryInterface(unknown, &IID_IAudioData, (void **)&audio_data); + if (FAILED(result)) + { + /* test_audiodata_query_interface handles this case */ + skip("No IAudioData\n"); + goto out_unknown; + } + + result = IAudioData_SetFormat(audio_data, NULL); + ok(E_POINTER == result, "got 0x%08x\n", result); + + wave_format.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; + wave_format.Format.nChannels = 2; + wave_format.Format.nSamplesPerSec = 44100; + wave_format.Format.nAvgBytesPerSec = 176400; + wave_format.Format.nBlockAlign = 4; + wave_format.Format.wBitsPerSample = 16; + wave_format.Format.cbSize = 22; + wave_format.Samples.wValidBitsPerSample = 16; + wave_format.dwChannelMask = KSAUDIO_SPEAKER_STEREO; + wave_format.SubFormat = KSDATAFORMAT_SUBTYPE_PCM; + result = IAudioData_SetFormat(audio_data, &wave_format.Format); + ok(E_INVALIDARG == result, "got 0x%08x\n", result); + + wave_format.Format.wFormatTag = WAVE_FORMAT_PCM; + wave_format.Format.nChannels = 2; + wave_format.Format.nSamplesPerSec = 44100; + wave_format.Format.nAvgBytesPerSec = 176400; + wave_format.Format.nBlockAlign = 4; + wave_format.Format.wBitsPerSample = 16; + wave_format.Format.cbSize = 0; + result = IAudioData_SetFormat(audio_data, &wave_format.Format); + ok(S_OK == result, "got 0x%08x\n", result); + + wave_format.Format.wFormatTag = 0xdead; + wave_format.Format.nChannels = 0xdead; + wave_format.Format.nSamplesPerSec = 0xdeadbeef; + wave_format.Format.nAvgBytesPerSec = 0xdeadbeef; + wave_format.Format.nBlockAlign = 0xdead; + wave_format.Format.wBitsPerSample = 0xdead; + wave_format.Format.cbSize = 0xdead; + result = IAudioData_GetFormat(audio_data, &wave_format.Format); + ok(S_OK == result, "got 0x%08x\n", result); + ok(WAVE_FORMAT_PCM == wave_format.Format.wFormatTag, "got %u\n", wave_format.Format.wFormatTag); + ok(2 == wave_format.Format.nChannels, "got %u\n", wave_format.Format.nChannels); + ok(44100 == wave_format.Format.nSamplesPerSec, "got %u\n", wave_format.Format.nSamplesPerSec); + ok(176400 == wave_format.Format.nAvgBytesPerSec, "got %u\n", wave_format.Format.nAvgBytesPerSec); + ok(4 == wave_format.Format.nBlockAlign, "got %u\n", wave_format.Format.nBlockAlign); + ok(16 == wave_format.Format.wBitsPerSample, "got %u\n", wave_format.Format.wBitsPerSample); + ok(0 == wave_format.Format.cbSize, "got %u\n", wave_format.Format.cbSize); + + IAudioData_Release(audio_data); + +out_unknown: + IUnknown_Release(unknown); +} + START_TEST(amstream) { HANDLE file; @@ -618,5 +879,12 @@ test_renderfile(); } + test_audiodata_query_interface(); + test_audiodata_get_info(); + test_audiodata_set_buffer(); + test_audiodata_set_actual(); + test_audiodata_get_format(); + test_audiodata_set_format(); + CoUninitialize(); }
8 years, 2 months
1
0
0
0
[akhaldi] 72249: [AMSTREAM] Sync with Wine Staging 1.9.16. CORE-11866
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Aug 18 09:14:24 2016 New Revision: 72249 URL:
http://svn.reactos.org/svn/reactos?rev=72249&view=rev
Log: [AMSTREAM] Sync with Wine Staging 1.9.16. CORE-11866 Modified: trunk/reactos/dll/directx/wine/amstream/CMakeLists.txt trunk/reactos/dll/directx/wine/amstream/audiodata.c trunk/reactos/dll/directx/wine/amstream/main.c trunk/reactos/dll/directx/wine/amstream/mediastream.c trunk/reactos/media/doc/README.WINE Modified: trunk/reactos/dll/directx/wine/amstream/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/amstream/…
============================================================================== --- trunk/reactos/dll/directx/wine/amstream/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/directx/wine/amstream/CMakeLists.txt [iso-8859-1] Thu Aug 18 09:14:24 2016 @@ -21,6 +21,6 @@ set_module_type(amstream win32dll) target_link_libraries(amstream strmbase strmiids uuid wine) -add_importlibs(amstream ole32 ddraw msvcrt kernel32 ntdll) +add_importlibs(amstream ole32 ddraw user32 msvcrt kernel32 ntdll) add_pch(amstream amstream_private.h SOURCE) add_cd_file(TARGET amstream DESTINATION reactos/system32 FOR all) Modified: trunk/reactos/dll/directx/wine/amstream/audiodata.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/amstream/…
============================================================================== --- trunk/reactos/dll/directx/wine/amstream/audiodata.c [iso-8859-1] (original) +++ trunk/reactos/dll/directx/wine/amstream/audiodata.c [iso-8859-1] Thu Aug 18 09:14:24 2016 @@ -23,6 +23,11 @@ typedef struct { IAudioData IAudioData_iface; LONG ref; + DWORD size; + BYTE *data; + BOOL data_owned; + DWORD actual_data; + WAVEFORMATEX wave_format; } AMAudioDataImpl; static inline AMAudioDataImpl *impl_from_IAudioData(IAudioData *iface) @@ -36,7 +41,6 @@ TRACE("(%p)->(%s,%p)\n", iface, debugstr_guid(riid), ret_iface); if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IMemoryData) || IsEqualGUID(riid, &IID_IAudioData)) { IAudioData_AddRef(iface); @@ -66,7 +70,14 @@ TRACE("(%p)->(): new ref = %u\n", iface, This->ref); if (!ref) + { + if (This->data_owned) + { + CoTaskMemFree(This->data); + } + HeapFree(GetProcessHeap(), 0, This); + } return ref; } @@ -74,38 +85,116 @@ /*** IMemoryData methods ***/ static HRESULT WINAPI IAudioDataImpl_SetBuffer(IAudioData* iface, DWORD size, BYTE *data, DWORD flags) { - FIXME("(%p)->(%u,%p,%x): stub\n", iface, size, data, flags); - - return E_NOTIMPL; + AMAudioDataImpl *This = impl_from_IAudioData(iface); + + TRACE("(%p)->(%u,%p,%x)\n", iface, size, data, flags); + + if (!size) + { + return E_INVALIDARG; + } + + if (This->data_owned) + { + CoTaskMemFree(This->data); + This->data_owned = FALSE; + } + + This->size = size; + This->data = data; + + if (!This->data) + { + This->data = CoTaskMemAlloc(This->size); + This->data_owned = TRUE; + if (!This->data) + { + return E_OUTOFMEMORY; + } + } + + return S_OK; } static HRESULT WINAPI IAudioDataImpl_GetInfo(IAudioData* iface, DWORD *length, BYTE **data, DWORD *actual_data) { - FIXME("(%p)->(%p,%p,%p): stub\n", iface, length, data, actual_data); - - return E_NOTIMPL; + AMAudioDataImpl *This = impl_from_IAudioData(iface); + + TRACE("(%p)->(%p,%p,%p)\n", iface, length, data, actual_data); + + if (!This->data) + { + return MS_E_NOTINIT; + } + + if (length) + { + *length = This->size; + } + if (data) + { + *data = This->data; + } + if (actual_data) + { + *actual_data = This->actual_data; + } + + return S_OK; } static HRESULT WINAPI IAudioDataImpl_SetActual(IAudioData* iface, DWORD data_valid) { - FIXME("(%p)->(%u): stub\n", iface, data_valid); - - return E_NOTIMPL; + AMAudioDataImpl *This = impl_from_IAudioData(iface); + + TRACE("(%p)->(%u)\n", iface, data_valid); + + if (data_valid > This->size) + { + return E_INVALIDARG; + } + + This->actual_data = data_valid; + + return S_OK; } /*** IAudioData methods ***/ static HRESULT WINAPI IAudioDataImpl_GetFormat(IAudioData* iface, WAVEFORMATEX *wave_format_current) { - FIXME("(%p)->(%p): stub\n", iface, wave_format_current); - - return E_NOTIMPL; + AMAudioDataImpl *This = impl_from_IAudioData(iface); + + TRACE("(%p)->(%p)\n", iface, wave_format_current); + + if (!wave_format_current) + { + return E_POINTER; + } + + *wave_format_current = This->wave_format; + + return S_OK; } static HRESULT WINAPI IAudioDataImpl_SetFormat(IAudioData* iface, const WAVEFORMATEX *wave_format) { - FIXME("(%p)->(%p): stub\n", iface, wave_format); - - return E_NOTIMPL; + AMAudioDataImpl *This = impl_from_IAudioData(iface); + + TRACE("(%p)->(%p)\n", iface, wave_format); + + if (!wave_format) + { + return E_POINTER; + } + + if (WAVE_FORMAT_PCM != wave_format->wFormatTag) + { + return E_INVALIDARG; + } + + This->wave_format = *wave_format; + + return S_OK; } static const struct IAudioDataVtbl AudioData_Vtbl = @@ -139,6 +228,13 @@ object->IAudioData_iface.lpVtbl = &AudioData_Vtbl; object->ref = 1; + object->wave_format.wFormatTag = WAVE_FORMAT_PCM; + object->wave_format.nChannels = 1; + object->wave_format.nSamplesPerSec = 11025; + object->wave_format.wBitsPerSample = 16; + object->wave_format.nBlockAlign = object->wave_format.wBitsPerSample * object->wave_format.nChannels / 8; + object->wave_format.nAvgBytesPerSec = object->wave_format.nBlockAlign * object->wave_format.nSamplesPerSec; + *ppObj = &object->IAudioData_iface; return S_OK; Modified: trunk/reactos/dll/directx/wine/amstream/main.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/amstream/…
============================================================================== --- trunk/reactos/dll/directx/wine/amstream/main.c [iso-8859-1] (original) +++ trunk/reactos/dll/directx/wine/amstream/main.c [iso-8859-1] Thu Aug 18 09:14:24 2016 @@ -102,8 +102,8 @@ { IClassFactoryImpl *This = impl_from_IClassFactory(iface); HRESULT hres; - LPUNKNOWN punk; - + IUnknown *punk; + TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj); *ppobj = NULL; Modified: trunk/reactos/dll/directx/wine/amstream/mediastream.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/amstream/…
============================================================================== --- trunk/reactos/dll/directx/wine/amstream/mediastream.c [iso-8859-1] (original) +++ trunk/reactos/dll/directx/wine/amstream/mediastream.c [iso-8859-1] Thu Aug 18 09:14:24 2016 @@ -1038,11 +1038,7 @@ DDSURFACEDESC desc = { sizeof(desc) }; hr = IDirectDrawSurface_GetSurfaceDesc(object->surface, &desc); if (hr == S_OK) - { - object->rect.left = object->rect.top = 0; - object->rect.right = desc.dwWidth; - object->rect.bottom = desc.dwHeight; - } + SetRect(&object->rect, 0, 0, desc.dwWidth, desc.dwHeight); } *ddraw_stream_sample = &object->IDirectDrawStreamSample_iface; Modified: trunk/reactos/media/doc/README.WINE URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Thu Aug 18 09:14:24 2016 @@ -21,7 +21,7 @@ The following libraries are shared with Wine. -reactos/dll/directx/wine/amstream # Synced to WineStaging-1.9.11 +reactos/dll/directx/wine/amstream # Synced to WineStaging-1.9.16 reactos/dll/directx/wine/d3d8 # Synced to WineStaging-1.9.4 reactos/dll/directx/wine/d3d9 # Synced to WineStaging-1.9.4 reactos/dll/directx/wine/d3dcompiler_43 # Synced to WineStaging-1.9.4
8 years, 2 months
1
0
0
0
← Newer
1
...
25
26
27
28
29
30
31
...
47
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
Results per page:
10
25
50
100
200