Module: wine Branch: master Commit: dcab5fe61bed87b291901ceff686894a64871d98 URL: http://source.winehq.org/git/wine.git/?a=commit;h=dcab5fe61bed87b291901ceff6...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon May 12 01:59:33 2014 +0400
setupapi: Make default context structure layout compatible.
---
dlls/setupapi/queue.c | 13 ++++++++---- dlls/setupapi/tests/misc.c | 47 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 4 deletions(-)
diff --git a/dlls/setupapi/queue.c b/dlls/setupapi/queue.c index 1855e99..d57f8e1 100644 --- a/dlls/setupapi/queue.c +++ b/dlls/setupapi/queue.c @@ -39,9 +39,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(setupapi); /* context structure for the default queue callback */ struct default_callback_context { - HWND owner; - HWND progress; - UINT message; + DWORD magic; + HWND owner; + DWORD unk1[4]; + DWORD_PTR unk2[7]; + HWND progress; + UINT message; + DWORD_PTR unk3[5]; };
struct file_op @@ -1482,8 +1486,9 @@ PVOID WINAPI SetupInitDefaultQueueCallbackEx( HWND owner, HWND progress, UINT ms { struct default_callback_context *context;
- if ((context = HeapAlloc( GetProcessHeap(), 0, sizeof(*context) ))) + if ((context = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*context) ))) { + context->magic = 0x43515053; /* "SPQC" */ context->owner = owner; context->progress = progress; context->message = msg; diff --git a/dlls/setupapi/tests/misc.c b/dlls/setupapi/tests/misc.c index db74fcb..cfe888b 100644 --- a/dlls/setupapi/tests/misc.c +++ b/dlls/setupapi/tests/misc.c @@ -731,6 +731,51 @@ static void test_SetupUninstallOEMInf(void) } }
+struct default_callback_context +{ + DWORD magic; + HWND owner; + DWORD unk1[4]; + DWORD_PTR unk2[7]; + HWND progress; + UINT message; + DWORD_PTR unk3[5]; +}; + +static void test_defaultcallback(void) +{ + struct default_callback_context *ctxt; + static const DWORD magic = 0x43515053; /* "SPQC" */ + HWND owner, progress; + + owner = (HWND)0x123; + progress = (HWND)0x456; + ctxt = SetupInitDefaultQueueCallbackEx(owner, progress, WM_USER, 0, NULL); + ok(ctxt != NULL, "got %p\n", ctxt); + + ok(ctxt->magic == magic || broken(ctxt->magic != magic) /* win2000 */, "got magic 0x%08x\n", ctxt->magic); + if (ctxt->magic == magic) + { + ok(ctxt->owner == owner, "got %p, expected %p\n", ctxt->owner, owner); + ok(ctxt->progress == progress, "got %p, expected %p\n", ctxt->progress, progress); + ok(ctxt->message == WM_USER, "got %d, expected %d\n", ctxt->message, WM_USER); + SetupTermDefaultQueueCallback(ctxt); + } + else + { + win_skip("Skipping tests on old systems.\n"); + SetupTermDefaultQueueCallback(ctxt); + return; + } + + ctxt = SetupInitDefaultQueueCallback(owner); + ok(ctxt->magic == magic, "got magic 0x%08x\n", ctxt->magic); + ok(ctxt->owner == owner, "got %p, expected %p\n", ctxt->owner, owner); + ok(ctxt->progress == NULL, "got %p, expected %p\n", ctxt->progress, progress); + ok(ctxt->message == 0, "got %d\n", ctxt->message); + SetupTermDefaultQueueCallback(ctxt); +} + START_TEST(misc) { HMODULE hsetupapi = GetModuleHandleA("setupapi.dll"); @@ -760,4 +805,6 @@ START_TEST(misc) test_SetupUninstallOEMInf(); else win_skip("SetupUninstallOEMInfA is not available\n"); + + test_defaultcallback(); }