From 9d2139b7d8b9f8e36e07059b9ff8ee65ef5f29df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 01:51:46 +0100 Subject: [PATCH 01/15] [PSDK] Fix NOTIFYICONDATA structure; add NOTIFYICONDATA_V3_SIZE definitions. --- sdk/include/psdk/shellapi.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/include/psdk/shellapi.h b/sdk/include/psdk/shellapi.h index 5845c2a9bb0..2e26e598687 100644 --- a/sdk/include/psdk/shellapi.h +++ b/sdk/include/psdk/shellapi.h @@ -217,8 +217,6 @@ typedef struct _NOTIFYICONDATAA { } DUMMYUNIONNAME; CHAR szInfoTitle[64]; DWORD dwInfoFlags; -#else - CHAR szTip[64]; #endif #if (NTDDI_VERSION >= NTDDI_WINXP) GUID guidItem; @@ -236,7 +234,7 @@ typedef struct _NOTIFYICONDATAW { UINT uCallbackMessage; HICON hIcon; #if (NTDDI_VERSION < NTDDI_WIN2K) - CHAR szTip[64]; + WCHAR szTip[64]; #endif #if (NTDDI_VERSION >= NTDDI_WIN2K) WCHAR szTip[128]; @@ -249,14 +247,12 @@ typedef struct _NOTIFYICONDATAW { } DUMMYUNIONNAME; WCHAR szInfoTitle[64]; DWORD dwInfoFlags; -#else - WCHAR szTip[64]; #endif #if (NTDDI_VERSION >= NTDDI_WINXP) GUID guidItem; #endif #if (NTDDI_VERSION >= NTDDI_VISTA) - HICON hBalloonIcon; + HICON hBalloonIcon; #endif } NOTIFYICONDATAW,*PNOTIFYICONDATAW; @@ -264,6 +260,8 @@ typedef struct _NOTIFYICONDATAW { #define NOTIFYICONDATAW_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAW, szTip[64]) #define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem) #define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem) +#define NOTIFYICONDATAA_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAA, hBalloonIcon) +#define NOTIFYICONDATAW_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAW, hBalloonIcon) #if WINVER >= 0x400 typedef struct _DRAGINFOA { @@ -612,6 +610,7 @@ DoEnvironmentSubstW( #ifdef UNICODE #define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAW_V1_SIZE #define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAW_V2_SIZE +#define NOTIFYICONDATA_V3_SIZE NOTIFYICONDATAW_V3_SIZE typedef NOTIFYICONDATAW NOTIFYICONDATA,*PNOTIFYICONDATA; typedef DRAGINFOW DRAGINFO,*LPDRAGINFO; typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO,*LPSHELLEXECUTEINFO; @@ -639,6 +638,7 @@ typedef LPSHNAMEMAPPINGW LPSHNAMEMAPPING; #else #define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAA_V1_SIZE #define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAA_V2_SIZE +#define NOTIFYICONDATA_V3_SIZE NOTIFYICONDATAA_V3_SIZE typedef NOTIFYICONDATAA NOTIFYICONDATA,*PNOTIFYICONDATA; typedef DRAGINFOA DRAGINFO,*LPDRAGINFO; typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO,*LPSHELLEXECUTEINFO; From 5ecabcce59d7c773d9d9d24f718b242892203b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 01:52:50 +0100 Subject: [PATCH 02/15] [SHELL32] Fix copy-pasta. --- dll/win32/shell32/systray.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/win32/shell32/systray.cpp b/dll/win32/shell32/systray.cpp index 435411a1725..aa07708d4d6 100644 --- a/dll/win32/shell32/systray.cpp +++ b/dll/win32/shell32/systray.cpp @@ -125,7 +125,7 @@ BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW pnid) { WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n", pnid->cbSize, NOTIFYICONDATAW_V1_SIZE); - cbSize = NOTIFYICONDATAA_V1_SIZE; + cbSize = NOTIFYICONDATAW_V1_SIZE; } else cbSize = pnid->cbSize; From af4bdd4388746333b584b3c996e8f580e3701094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 01:53:24 +0100 Subject: [PATCH 03/15] [NETSHELL] Don't use hardcoded values. --- dll/shellext/netshell/lanstatusui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dll/shellext/netshell/lanstatusui.cpp b/dll/shellext/netshell/lanstatusui.cpp index 599eb22841c..6cfd065b46a 100644 --- a/dll/shellext/netshell/lanstatusui.cpp +++ b/dll/shellext/netshell/lanstatusui.cpp @@ -232,7 +232,7 @@ UpdateLanStatus(HWND hwndDlg, LANSTATUSUI_CONTEXT * pContext) nid.cbSize = sizeof(nid); nid.uID = pContext->uID; nid.hWnd = pContext->hwndStatusDlg; - nid.uVersion = 3; + nid.uVersion = NOTIFYICON_VERSION; if (pContext->pNet->GetProperties(&pProperties) == S_OK) { @@ -1041,7 +1041,7 @@ CLanStatus::InitializeNetTaskbarNotifications() nid.cbSize = sizeof(nid); nid.uID = Index++; nid.uFlags = NIF_MESSAGE; - nid.uVersion = 3; + nid.uVersion = NOTIFYICON_VERSION; nid.uCallbackMessage = WM_SHOWSTATUSDLG; nid.hWnd = hwndDlg; From b7c3398f95d0aa54f2b5bd1acae0bef496af7e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 01:54:55 +0100 Subject: [PATCH 04/15] [STOBJECT] Fully zero-out the full NOTIFYICONDATA structure (it wasn't zeroed out correctly in MSVC build). --- dll/shellext/stobject/csystray.cpp | 5 +++-- dll/shellext/stobject/hotplug.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/dll/shellext/stobject/csystray.cpp b/dll/shellext/stobject/csystray.cpp index 89bd5c5ac03..f75f25d54c4 100644 --- a/dll/shellext/stobject/csystray.cpp +++ b/dll/shellext/stobject/csystray.cpp @@ -121,11 +121,12 @@ HRESULT CSysTray::ProcessIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, LR *--*/ HRESULT CSysTray::NotifyIcon(INT code, UINT uId, HICON hIcon, LPCWSTR szTip, DWORD dwstate) { - NOTIFYICONDATA nim = { 0 }; + NOTIFYICONDATA nim; TRACE("NotifyIcon code=%d, uId=%d, hIcon=%p, szTip=%S\n", code, uId, hIcon, szTip); - nim.cbSize = sizeof(NOTIFYICONDATA); + ZeroMemory(&nim, sizeof(nim)); + nim.cbSize = sizeof(nim); nim.uFlags = NIF_MESSAGE | NIF_ICON | NIF_STATE | NIF_TIP; nim.hIcon = hIcon; nim.uID = uId; diff --git a/dll/shellext/stobject/hotplug.cpp b/dll/shellext/stobject/hotplug.cpp index 5c6d3099a80..9550d239603 100644 --- a/dll/shellext/stobject/hotplug.cpp +++ b/dll/shellext/stobject/hotplug.cpp @@ -100,8 +100,10 @@ HRESULT EnumHotpluggedDevices(CSimpleArray &devList) *--*/ HRESULT NotifyBalloon(CSysTray* pSysTray, LPCWSTR szTitle = NULL, LPCWSTR szInfo = NULL, UINT uId = ID_ICON_HOTPLUG) { - NOTIFYICONDATA nim = { 0 }; - nim.cbSize = sizeof(NOTIFYICONDATA); + NOTIFYICONDATA nim; + + ZeroMemory(&nim, sizeof(nim)); + nim.cbSize = sizeof(nim); nim.uID = uId; nim.hWnd = pSysTray->GetHWnd(); From 04498f3eb52a7d5f960d096f53be8808dc68dd93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 01:56:11 +0100 Subject: [PATCH 05/15] [EXPLORER] Don't use deprecated StrNCpy function but use the string-safe StringCchCopy instead. Also fix a copy-paste error in the _countofs. --- base/shell/explorer/syspager.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/base/shell/explorer/syspager.cpp b/base/shell/explorer/syspager.cpp index 4656d8f6fa4..9ba0f2fc999 100644 --- a/base/shell/explorer/syspager.cpp +++ b/base/shell/explorer/syspager.cpp @@ -107,8 +107,8 @@ private: Info(InternalIconData * source) { pSource = source; - StrNCpy(szInfo, source->szInfo, _countof(szInfo)); - StrNCpy(szInfoTitle, source->szInfoTitle, _countof(szInfoTitle)); + StringCchCopy(szInfo, _countof(szInfo), source->szInfo); + StringCchCopy(szInfoTitle, _countof(szInfoTitle), source->szInfoTitle); uIcon = source->dwInfoFlags & NIIF_ICON_MASK; if (source->dwInfoFlags == NIIF_USER) uIcon = reinterpret_cast(source->hIcon); @@ -775,8 +775,8 @@ BOOL CNotifyToolbar::AddButton(_In_ CONST NOTIFYICONDATA *iconData) if (iconData->uFlags & NIF_INFO) { // NOTE: In Vista+, the uTimeout value is disregarded, and the accessibility settings are used always. - StrNCpy(notifyItem->szInfo, iconData->szInfo, _countof(notifyItem->szInfo)); - StrNCpy(notifyItem->szInfoTitle, iconData->szInfoTitle, _countof(notifyItem->szInfo)); + StringCchCopy(notifyItem->szInfo, _countof(notifyItem->szInfo), iconData->szInfo); + StringCchCopy(notifyItem->szInfoTitle, _countof(notifyItem->szInfoTitle), iconData->szInfoTitle); notifyItem->dwInfoFlags = iconData->dwInfoFlags; notifyItem->uTimeout = iconData->uTimeout; } @@ -913,8 +913,8 @@ BOOL CNotifyToolbar::UpdateButton(_In_ CONST NOTIFYICONDATA *iconData) if (iconData->uFlags & NIF_INFO) { // NOTE: In Vista+, the uTimeout value is disregarded, and the accessibility settings are used always. - StrNCpy(notifyItem->szInfo, iconData->szInfo, _countof(notifyItem->szInfo)); - StrNCpy(notifyItem->szInfoTitle, iconData->szInfoTitle, _countof(notifyItem->szInfo)); + StringCchCopy(notifyItem->szInfo, _countof(notifyItem->szInfo), iconData->szInfo); + StringCchCopy(notifyItem->szInfoTitle, _countof(notifyItem->szInfoTitle), iconData->szInfoTitle); notifyItem->dwInfoFlags = iconData->dwInfoFlags; notifyItem->uTimeout = iconData->uTimeout; } From 5de33ab010f3cb3ab495cd1f5cfde60a0257d61d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 02:23:28 +0100 Subject: [PATCH 06/15] [STOBJECT] Revert b7c3398 because it was not the cause of the original problem I wanted to fix (notify structure not completely zeroed-out on the receiver side of the notification). --- dll/shellext/stobject/csystray.cpp | 5 ++--- dll/shellext/stobject/hotplug.cpp | 6 ++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/dll/shellext/stobject/csystray.cpp b/dll/shellext/stobject/csystray.cpp index f75f25d54c4..89bd5c5ac03 100644 --- a/dll/shellext/stobject/csystray.cpp +++ b/dll/shellext/stobject/csystray.cpp @@ -121,12 +121,11 @@ HRESULT CSysTray::ProcessIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, LR *--*/ HRESULT CSysTray::NotifyIcon(INT code, UINT uId, HICON hIcon, LPCWSTR szTip, DWORD dwstate) { - NOTIFYICONDATA nim; + NOTIFYICONDATA nim = { 0 }; TRACE("NotifyIcon code=%d, uId=%d, hIcon=%p, szTip=%S\n", code, uId, hIcon, szTip); - ZeroMemory(&nim, sizeof(nim)); - nim.cbSize = sizeof(nim); + nim.cbSize = sizeof(NOTIFYICONDATA); nim.uFlags = NIF_MESSAGE | NIF_ICON | NIF_STATE | NIF_TIP; nim.hIcon = hIcon; nim.uID = uId; diff --git a/dll/shellext/stobject/hotplug.cpp b/dll/shellext/stobject/hotplug.cpp index 9550d239603..5c6d3099a80 100644 --- a/dll/shellext/stobject/hotplug.cpp +++ b/dll/shellext/stobject/hotplug.cpp @@ -100,10 +100,8 @@ HRESULT EnumHotpluggedDevices(CSimpleArray &devList) *--*/ HRESULT NotifyBalloon(CSysTray* pSysTray, LPCWSTR szTitle = NULL, LPCWSTR szInfo = NULL, UINT uId = ID_ICON_HOTPLUG) { - NOTIFYICONDATA nim; - - ZeroMemory(&nim, sizeof(nim)); - nim.cbSize = sizeof(nim); + NOTIFYICONDATA nim = { 0 }; + nim.cbSize = sizeof(NOTIFYICONDATA); nim.uID = uId; nim.hWnd = pSysTray->GetHWnd(); From c7fc2ef4d278546e788f0e85238fb814fdff43bf Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 3 Feb 2018 23:16:31 +0100 Subject: [PATCH 07/15] [SETUPAPI] Update some more functions to the current coding style, add annotations and add function names to the TRACE calls. --- dll/win32/setupapi/cfgmgr.c | 218 ++++++++++++++++++++++++++---------- 1 file changed, 156 insertions(+), 62 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index 14f05963e20..4ccd7ae8f5a 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -1483,10 +1483,14 @@ CM_Delete_Range( /*********************************************************************** * CM_Disable_DevNode [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Disable_DevNode( - DEVINST dnDevInst, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Disable_DevNode( + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags) { - TRACE("%p %lx\n", dnDevInst, ulFlags); + TRACE("CM_Disable_DevNode(%p %lx)\n", + dnDevInst, ulFlags); return CM_Disable_DevNode_Ex(dnDevInst, ulFlags, NULL); } @@ -1494,15 +1498,20 @@ CONFIGRET WINAPI CM_Disable_DevNode( /*********************************************************************** * CM_Disable_DevNode_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Disable_DevNode_Ex( - DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Disable_DevNode_Ex( + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; LPWSTR lpDevInst; CONFIGRET ret; - FIXME("%p %lx %p\n", dnDevInst, ulFlags, hMachine); + FIXME("CM_Disable_DevNode_Ex(%p %lx %p)\n", + dnDevInst, ulFlags, hMachine); if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; @@ -1554,11 +1563,14 @@ CONFIGRET WINAPI CM_Disable_DevNode_Ex( /*********************************************************************** * CM_Disconnect_Machine [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Disconnect_Machine(HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Disconnect_Machine( + _In_opt_ HMACHINE hMachine) { PMACHINE_INFO pMachine; - TRACE("%lx\n", hMachine); + TRACE("CM_Disconnect_Machine(%lx)\n", hMachine); pMachine = (PMACHINE_INFO)hMachine; if (pMachine == NULL) @@ -1598,10 +1610,13 @@ CM_Dup_Range_List( /*********************************************************************** * CM_Enable_DevNode [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Enable_DevNode( - DEVINST dnDevInst, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Enable_DevNode( + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags) { - TRACE("%p %lx\n", dnDevInst, ulFlags); + TRACE("CM_Enable_DevNode(%p %lx)\n", dnDevInst, ulFlags); return CM_Enable_DevNode_Ex(dnDevInst, ulFlags, NULL); } @@ -1609,15 +1624,19 @@ CONFIGRET WINAPI CM_Enable_DevNode( /*********************************************************************** * CM_Enable_DevNode_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Enable_DevNode_Ex( - DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Enable_DevNode_Ex( + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; LPWSTR lpDevInst; CONFIGRET ret; - TRACE("%p %lx %p\n", dnDevInst, ulFlags, hMachine); + TRACE("CM_Enable_DevNode_Ex(%p %lx %p)\n", dnDevInst, ulFlags, hMachine); if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; @@ -1669,10 +1688,16 @@ CONFIGRET WINAPI CM_Enable_DevNode_Ex( /*********************************************************************** * CM_Enumerate_Classes [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Enumerate_Classes( - ULONG ulClassIndex, LPGUID ClassGuid, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Enumerate_Classes( + _In_ ULONG ulClassIndex, + _Out_ LPGUID ClassGuid, + _In_ ULONG ulFlags) { - TRACE("%lx %p %lx\n", ulClassIndex, ClassGuid, ulFlags); + TRACE("CM_Enumerate_Classes(%lx %p %lx)\n", + ulClassIndex, ClassGuid, ulFlags); + return CM_Enumerate_Classes_Ex(ulClassIndex, ClassGuid, ulFlags, NULL); } @@ -1680,15 +1705,21 @@ CONFIGRET WINAPI CM_Enumerate_Classes( /*********************************************************************** * CM_Enumerate_Classes_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Enumerate_Classes_Ex( - ULONG ulClassIndex, LPGUID ClassGuid, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Enumerate_Classes_Ex( + _In_ ULONG ulClassIndex, + _Out_ LPGUID ClassGuid, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { WCHAR szBuffer[MAX_GUID_STRING_LEN]; RPC_BINDING_HANDLE BindingHandle = NULL; CONFIGRET ret = CR_SUCCESS; ULONG ulLength = MAX_GUID_STRING_LEN; - TRACE("%lx %p %lx %p\n", ulClassIndex, ClassGuid, ulFlags, hMachine); + TRACE("CM_Enumerate_Classes_Ex(%lx %p %lx %p)\n", + ulClassIndex, ClassGuid, ulFlags, hMachine); if (ClassGuid == NULL) return CR_INVALID_POINTER; @@ -1741,10 +1772,17 @@ CONFIGRET WINAPI CM_Enumerate_Classes_Ex( /*********************************************************************** * CM_Enumerate_EnumeratorsA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Enumerate_EnumeratorsA( - ULONG ulEnumIndex, PCHAR Buffer, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Enumerate_EnumeratorsA( + _In_ ULONG ulEnumIndex, + _Out_ PCHAR Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%lu %p %p %lx\n", ulEnumIndex, Buffer, pulLength, ulFlags); + TRACE("CM_Enumerate_EnumeratorsA(%lu %p %p %lx)\n", + ulEnumIndex, Buffer, pulLength, ulFlags); + return CM_Enumerate_Enumerators_ExA(ulEnumIndex, Buffer, pulLength, ulFlags, NULL); } @@ -1753,10 +1791,17 @@ CONFIGRET WINAPI CM_Enumerate_EnumeratorsA( /*********************************************************************** * CM_Enumerate_EnumeratorsW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Enumerate_EnumeratorsW( - ULONG ulEnumIndex, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Enumerate_EnumeratorsW( + _In_ ULONG ulEnumIndex, + _Out_ PWCHAR Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%lu %p %p %lx\n", ulEnumIndex, Buffer, pulLength, ulFlags); + TRACE("CM_Enumerate_EnumeratorsW(%lu %p %p %lx)\n", + ulEnumIndex, Buffer, pulLength, ulFlags); + return CM_Enumerate_Enumerators_ExW(ulEnumIndex, Buffer, pulLength, ulFlags, NULL); } @@ -1765,17 +1810,22 @@ CONFIGRET WINAPI CM_Enumerate_EnumeratorsW( /*********************************************************************** * CM_Enumerate_Enumerators_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Enumerate_Enumerators_ExA( - ULONG ulEnumIndex, PCHAR Buffer, PULONG pulLength, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Enumerate_Enumerators_ExA( + _In_ ULONG ulEnumIndex, + _Out_ PCHAR Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { WCHAR szBuffer[MAX_DEVICE_ID_LEN]; ULONG ulOrigLength; ULONG ulLength; CONFIGRET ret = CR_SUCCESS; - TRACE("%lu %p %p %lx %lx\n", ulEnumIndex, Buffer, pulLength, ulFlags, - hMachine); + TRACE("CM_Enumerate_Enumerators_ExA(%lu %p %p %lx %lx)\n", + ulEnumIndex, Buffer, pulLength, ulFlags, hMachine); if (Buffer == NULL || pulLength == NULL) return CR_INVALID_POINTER; @@ -1811,15 +1861,20 @@ CONFIGRET WINAPI CM_Enumerate_Enumerators_ExA( /*********************************************************************** * CM_Enumerate_Enumerators_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Enumerate_Enumerators_ExW( - ULONG ulEnumIndex, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Enumerate_Enumerators_ExW( + _In_ ULONG ulEnumIndex, + _Out_ PWCHAR Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; CONFIGRET ret; - TRACE("%lu %p %p %lx %lx\n", ulEnumIndex, Buffer, pulLength, ulFlags, - hMachine); + TRACE("CM_Enumerate_Enumerators_ExW(%lu %p %p %lx %lx)\n", + ulEnumIndex, Buffer, pulLength, ulFlags, hMachine); if (Buffer == NULL || pulLength == NULL) return CR_INVALID_POINTER; @@ -1942,10 +1997,15 @@ done: /*********************************************************************** * CM_Free_Log_Conf [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Free_Log_Conf( - LOG_CONF lcLogConfToBeFreed, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Free_Log_Conf( + _In_ LOG_CONF lcLogConfToBeFreed, + _In_ ULONG ulFlags) { - TRACE("%lx %lx\n", lcLogConfToBeFreed, ulFlags); + TRACE("CM_Free_Log_Conf(%lx %lx)\n", + lcLogConfToBeFreed, ulFlags); + return CM_Free_Log_Conf_Ex(lcLogConfToBeFreed, ulFlags, NULL); } @@ -1953,8 +2013,12 @@ CONFIGRET WINAPI CM_Free_Log_Conf( /*********************************************************************** * CM_Free_Log_Conf_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Free_Log_Conf_Ex( - LOG_CONF lcLogConfToBeFreed, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Free_Log_Conf_Ex( + _In_ LOG_CONF lcLogConfToBeFreed, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; @@ -1962,7 +2026,8 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Ex( PLOG_CONF_INFO pLogConfInfo; CONFIGRET ret; - TRACE("%lx %lx %lx\n", lcLogConfToBeFreed, ulFlags, hMachine); + TRACE("CM_Free_Log_Conf_Ex(%lx %lx %lx)\n", + lcLogConfToBeFreed, ulFlags, hMachine); if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; @@ -2012,12 +2077,14 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Ex( /*********************************************************************** * CM_Free_Log_Conf_Handle [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Free_Log_Conf_Handle( - LOG_CONF lcLogConf) +CONFIGRET +WINAPI +CM_Free_Log_Conf_Handle( + _In_ LOG_CONF lcLogConf) { PLOG_CONF_INFO pLogConfInfo; - TRACE("%lx\n", lcLogConf); + TRACE("CM_Free_Log_Conf_Handle(%lx)\n", lcLogConf); pLogConfInfo = (PLOG_CONF_INFO)lcLogConf; if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC) @@ -2080,10 +2147,16 @@ CM_Free_Range_List( /*********************************************************************** * CM_Free_Res_Des [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Free_Res_Des( - PRES_DES prdResDes, RES_DES rdResDes, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Free_Res_Des( + _Out_ PRES_DES prdResDes, + _In_ RES_DES rdResDes, + _In_ ULONG ulFlags) { - TRACE("%p %p %lx\n", prdResDes, rdResDes, ulFlags); + TRACE("CM_Free_Res_Des(%p %p %lx)\n", + prdResDes, rdResDes, ulFlags); + return CM_Free_Res_Des_Ex(prdResDes, rdResDes, ulFlags, NULL); } @@ -2091,11 +2164,16 @@ CONFIGRET WINAPI CM_Free_Res_Des( /*********************************************************************** * CM_Free_Res_Des_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Free_Res_Des_Ex( - PRES_DES prdResDes, RES_DES rdResDes, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Free_Res_Des_Ex( + _Out_ PRES_DES prdResDes, + _In_ RES_DES rdResDes, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { - FIXME("%p %p %lx %lx\n", prdResDes, rdResDes, ulFlags, hMachine); + FIXME("CM_Free_Res_Des_Ex(%p %p %lx %lx)\n", + prdResDes, rdResDes, ulFlags, hMachine); return CR_CALL_NOT_IMPLEMENTED; } @@ -2104,10 +2182,12 @@ CONFIGRET WINAPI CM_Free_Res_Des_Ex( /*********************************************************************** * CM_Free_Res_Des_Handle [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Free_Res_Des_Handle( - RES_DES rdResDes) +CONFIGRET +WINAPI +CM_Free_Res_Des_Handle( + _In_ RES_DES rdResDes) { - FIXME("%p\n", rdResDes); + FIXME("CM_Free_Res_Des_Handle(%p)\n", rdResDes); return CR_CALL_NOT_IMPLEMENTED; } @@ -2116,10 +2196,16 @@ CONFIGRET WINAPI CM_Free_Res_Des_Handle( /*********************************************************************** * CM_Get_Child [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Child( - PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Child( + _Out_ PDEVINST pdnDevInst, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags) { - TRACE("%p %p %lx\n", pdnDevInst, dnDevInst, ulFlags); + TRACE("CM_Get_Child(%p %p %lx)\n", + pdnDevInst, dnDevInst, ulFlags); + return CM_Get_Child_Ex(pdnDevInst, dnDevInst, ulFlags, NULL); } @@ -2127,8 +2213,13 @@ CONFIGRET WINAPI CM_Get_Child( /*********************************************************************** * CM_Get_Child_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Child_Ex( - PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Child_Ex( + _Out_ PDEVINST pdnDevInst, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN]; RPC_BINDING_HANDLE BindingHandle = NULL; @@ -2137,7 +2228,8 @@ CONFIGRET WINAPI CM_Get_Child_Ex( DWORD dwIndex, dwLength = MAX_DEVICE_ID_LEN; CONFIGRET ret; - TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine); + TRACE("CM_Get_Child_Ex(%p %lx %lx %lx)\n", + pdnDevInst, dnDevInst, ulFlags, hMachine); if (pdnDevInst == NULL) return CR_INVALID_POINTER; @@ -5839,7 +5931,9 @@ CONFIGRET WINAPI CM_Reenumerate_DevNode( */ CONFIGRET WINAPI CM_Reenumerate_DevNode_Ex( - DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags, + _In_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; From 324180a32e9ec14a70a93d31baf40f73b4742064 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sun, 4 Feb 2018 12:54:15 +0100 Subject: [PATCH 08/15] [ROSLOAD] Fix clang-cl build. --- boot/environ/app/rosload/rosload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot/environ/app/rosload/rosload.c b/boot/environ/app/rosload/rosload.c index 65ec28b2bf7..9eda2d31fec 100644 --- a/boot/environ/app/rosload/rosload.c +++ b/boot/environ/app/rosload/rosload.c @@ -344,7 +344,7 @@ ArchRestoreProcessorFeatures ( if (ArchXCr0BitsToClear) { /* Clear them */ -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) __xsetbv(0, __xgetbv(0) & ~ArchXCr0BitsToClear); #endif ArchXCr0BitsToClear = 0; From dc51b419c7eb2beffb4226f94e3c8e7e567fe2f2 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sat, 3 Feb 2018 14:36:40 +0100 Subject: [PATCH 09/15] [USETUP] Use the smaller zlib_solo instead of the full zlib. CORE-14290 --- base/setup/usetup/CMakeLists.txt | 2 +- base/setup/usetup/cabinet.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/base/setup/usetup/CMakeLists.txt b/base/setup/usetup/CMakeLists.txt index 5922a4f0408..46034af7526 100644 --- a/base/setup/usetup/CMakeLists.txt +++ b/base/setup/usetup/CMakeLists.txt @@ -40,7 +40,7 @@ if(USE_CLANG_CL) add_target_compile_flags(usetup "-Wno-invalid-source-encoding") endif() -target_link_libraries(usetup zlib inflib ext2lib vfatlib) +target_link_libraries(usetup zlib_solo inflib ext2lib vfatlib) set_module_type(usetup nativecui) add_importlibs(usetup ntdll) add_pch(usetup usetup.h SOURCE) diff --git a/base/setup/usetup/cabinet.c b/base/setup/usetup/cabinet.c index 326d4935cfc..8cc35aa7960 100644 --- a/base/setup/usetup/cabinet.c +++ b/base/setup/usetup/cabinet.c @@ -10,6 +10,7 @@ #include "usetup.h" +#define Z_SOLO #include #define NDEBUG From 25bca520f54cce06bdabc8af278a76882a3c2d79 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sat, 3 Feb 2018 14:37:22 +0100 Subject: [PATCH 10/15] [MBEDTLS] Don't link with zlib, we don't use it. CORE-14290 --- dll/3rdparty/mbedtls/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/dll/3rdparty/mbedtls/CMakeLists.txt b/dll/3rdparty/mbedtls/CMakeLists.txt index c5af423712a..0fbb59bbf4f 100644 --- a/dll/3rdparty/mbedtls/CMakeLists.txt +++ b/dll/3rdparty/mbedtls/CMakeLists.txt @@ -84,7 +84,6 @@ add_library(mbedtls SHARED ${CMAKE_CURRENT_BINARY_DIR}/mbedtls.def) set_module_type(mbedtls win32dll) -target_link_libraries(mbedtls zlib) add_importlibs(mbedtls advapi32 msvcrt kernel32 ntdll) # to use `_vsnprintf_s` looks like we have to define MINGW_HAS_SECURE_API From 65d3bf7482b9fd5728ef2ad22bb17a38686636df Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 4 Feb 2018 15:40:35 +0100 Subject: [PATCH 11/15] [SETUPAPI] Fix the coding style, add annotations and fix the debug messages. --- dll/win32/setupapi/cfgmgr.c | 997 +++++++++++++++++++++++++----------- 1 file changed, 706 insertions(+), 291 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index 4ccd7ae8f5a..c77d8fd8dba 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -740,6 +740,7 @@ CM_Add_Empty_Log_Conf( { TRACE("CM_Add_Empty_Log_Conf(%p %p %lu %lx)\n", plcLogConf, dnDevInst, Priority, ulFlags); + return CM_Add_Empty_Log_Conf_Ex(plcLogConf, dnDevInst, Priority, ulFlags, NULL); } @@ -847,7 +848,8 @@ CM_Add_IDA( _In_ ULONG ulFlags) { TRACE("CM_Add_IDA(%p %s %lx)\n", - dnDevInst, pszID, ulFlags); + dnDevInst, debugstr_a(pszID), ulFlags); + return CM_Add_ID_ExA(dnDevInst, pszID, ulFlags, NULL); } @@ -864,6 +866,7 @@ CM_Add_IDW( { TRACE("CM_Add_IDW(%p %s %lx)\n", dnDevInst, debugstr_w(pszID), ulFlags); + return CM_Add_ID_ExW(dnDevInst, pszID, ulFlags, NULL); } @@ -883,7 +886,7 @@ CM_Add_ID_ExA( CONFIGRET ret; TRACE("CM_Add_ID_ExA(%p %s %lx %p)\n", - dnDevInst, pszID, ulFlags, hMachine); + dnDevInst, debugstr_a(pszID), ulFlags, hMachine); if (pSetupCaptureAndConvertAnsiArg(pszID, &pszIDW)) return CR_INVALID_DATA; @@ -1034,12 +1037,13 @@ CM_Add_Res_Des( _Out_opt_ PRES_DES prdResDes, _In_ LOG_CONF lcLogConf, _In_ RESOURCEID ResourceID, - _In_ PCVOID ResourceData, + _In_reads_bytes_(ResourceLen) PCVOID ResourceData, _In_ ULONG ResourceLen, _In_ ULONG ulFlags) { TRACE("CM_Add_Res_Des(%p %p %lu %p %lu %lx)\n", prdResDes, lcLogConf, ResourceID, ResourceData, ResourceLen, ulFlags); + return CM_Add_Res_Des_Ex(prdResDes, lcLogConf, ResourceID, ResourceData, ResourceLen, ulFlags, NULL); } @@ -1054,7 +1058,7 @@ CM_Add_Res_Des_Ex( _Out_opt_ PRES_DES prdResDes, _In_ LOG_CONF lcLogConf, _In_ RESOURCEID ResourceID, - _In_ PCVOID ResourceData, + _In_reads_bytes_(ResourceLen) PCVOID ResourceData, _In_ ULONG ResourceLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine) @@ -1080,7 +1084,7 @@ CM_Connect_MachineA( CONFIGRET ret; TRACE("CM_Connect_MachineA(%s %p)\n", - UNCServerName, phMachine); + debugstr_a(UNCServerName), phMachine); if (UNCServerName == NULL || *UNCServerName == 0) return CM_Connect_MachineW(NULL, phMachine); @@ -1178,6 +1182,7 @@ CM_Create_DevNodeA( { TRACE("CM_Create_DevNodeA(%p %s %p %lx)\n", pdnDevInst, debugstr_a(pDeviceID), dnParent, ulFlags); + return CM_Create_DevNode_ExA(pdnDevInst, pDeviceID, dnParent, ulFlags, NULL); } @@ -1196,6 +1201,7 @@ CM_Create_DevNodeW( { TRACE("CM_Create_DevNodeW(%p %s %p %lx)\n", pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags); + return CM_Create_DevNode_ExW(pdnDevInst, pDeviceID, dnParent, ulFlags, NULL); } @@ -1327,7 +1333,8 @@ CM_Create_Range_List( { PINTERNAL_RANGE_LIST pRangeList = NULL; - FIXME("CM_Create_Range_List(%p %lx)\n", prlh, ulFlags); + FIXME("CM_Create_Range_List(%p %lx)\n", + prlh, ulFlags); if (ulFlags != 0) return CR_INVALID_FLAG; @@ -1370,6 +1377,7 @@ CM_Delete_Class_Key( { TRACE("CM_Delete_Class_Key(%p %lx)\n", ClassGuid, ulFlags); + return CM_Delete_Class_Key_Ex(ClassGuid, ulFlags, NULL); } @@ -1440,6 +1448,7 @@ CM_Delete_DevNode_Key( { TRACE("CM_Delete_DevNode_Key(%p %lu %lx)\n", dnDevNode, ulHardwareProfile, ulFlags); + return CM_Delete_DevNode_Key_Ex(dnDevNode, ulHardwareProfile, ulFlags, NULL); } @@ -1476,6 +1485,7 @@ CM_Delete_Range( { FIXME("CM_Delete_Range(%I64u %I64u %p %lx)\n", ullStartValue, ullEndValue, rlh, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; } @@ -1491,6 +1501,7 @@ CM_Disable_DevNode( { TRACE("CM_Disable_DevNode(%p %lx)\n", dnDevInst, ulFlags); + return CM_Disable_DevNode_Ex(dnDevInst, ulFlags, NULL); } @@ -1603,6 +1614,7 @@ CM_Dup_Range_List( { FIXME("CM_Dup_Range_List(%p %p %lx)\n", rlhOld, rlhNew, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; } @@ -1616,7 +1628,9 @@ CM_Enable_DevNode( _In_ DEVINST dnDevInst, _In_ ULONG ulFlags) { - TRACE("CM_Enable_DevNode(%p %lx)\n", dnDevInst, ulFlags); + TRACE("CM_Enable_DevNode(%p %lx)\n", + dnDevInst, ulFlags); + return CM_Enable_DevNode_Ex(dnDevInst, ulFlags, NULL); } @@ -1636,7 +1650,8 @@ CM_Enable_DevNode_Ex( LPWSTR lpDevInst; CONFIGRET ret; - TRACE("CM_Enable_DevNode_Ex(%p %lx %p)\n", dnDevInst, ulFlags, hMachine); + TRACE("CM_Enable_DevNode_Ex(%p %lx %p)\n", + dnDevInst, ulFlags, hMachine); if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; @@ -1776,7 +1791,7 @@ CONFIGRET WINAPI CM_Enumerate_EnumeratorsA( _In_ ULONG ulEnumIndex, - _Out_ PCHAR Buffer, + _Out_writes_(*pulLength) PCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags) { @@ -1795,7 +1810,7 @@ CONFIGRET WINAPI CM_Enumerate_EnumeratorsW( _In_ ULONG ulEnumIndex, - _Out_ PWCHAR Buffer, + _Out_writes_(*pulLength) PWCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags) { @@ -1814,7 +1829,7 @@ CONFIGRET WINAPI CM_Enumerate_Enumerators_ExA( _In_ ULONG ulEnumIndex, - _Out_ PCHAR Buffer, + _Out_writes_(*pulLength) PCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine) @@ -1865,7 +1880,7 @@ CONFIGRET WINAPI CM_Enumerate_Enumerators_ExW( _In_ ULONG ulEnumIndex, - _Out_ PWCHAR Buffer, + _Out_writes_(*pulLength) PWCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine) @@ -1932,6 +1947,7 @@ CM_Find_Range( { FIXME("CM_Find_Range(%p %I64u %lu %I64u %I64u %p %lx)\n", pullStart, ullStart, ulLength, ullAlignment, ullEnd, rlh, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; } @@ -2295,11 +2311,17 @@ CM_Get_Child_Ex( /*********************************************************************** * CM_Get_Class_Key_NameA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Class_Key_NameA( - LPGUID ClassGuid, LPSTR pszKeyName, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Class_Key_NameA( + _In_ LPGUID ClassGuid, + _Out_writes_opt_(*pulLength) LPSTR pszKeyName, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%p %p %p %lx\n", + TRACE("CM_Get_Class_Key_NameA(%p %p %p %lx)\n", ClassGuid, pszKeyName, pulLength, ulFlags); + return CM_Get_Class_Key_Name_ExA(ClassGuid, pszKeyName, pulLength, ulFlags, NULL); } @@ -2308,11 +2330,17 @@ CONFIGRET WINAPI CM_Get_Class_Key_NameA( /*********************************************************************** * CM_Get_Class_Key_NameW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Class_Key_NameW( - LPGUID ClassGuid, LPWSTR pszKeyName, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Class_Key_NameW( + _In_ LPGUID ClassGuid, + _Out_writes_opt_(*pulLength) LPWSTR pszKeyName, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%p %p %p %lx\n", + TRACE("CM_Get_Class_Key_NameW(%p %p %p %lx)\n", ClassGuid, pszKeyName, pulLength, ulFlags); + return CM_Get_Class_Key_Name_ExW(ClassGuid, pszKeyName, pulLength, ulFlags, NULL); } @@ -2321,16 +2349,21 @@ CONFIGRET WINAPI CM_Get_Class_Key_NameW( /*********************************************************************** * CM_Get_Class_Key_Name_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Class_Key_Name_ExA( - LPGUID ClassGuid, LPSTR pszKeyName, PULONG pulLength, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Class_Key_Name_ExA( + _In_ LPGUID ClassGuid, + _Out_writes_opt_(*pulLength) LPSTR pszKeyName, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { WCHAR szBuffer[MAX_GUID_STRING_LEN]; CONFIGRET ret = CR_SUCCESS; ULONG ulLength; ULONG ulOrigLength; - TRACE("%p %p %p %lx %lx\n", + TRACE("CM_Get_Class_Key_Name_ExA(%p %p %p %lx %lx)\n", ClassGuid, pszKeyName, pulLength, ulFlags, hMachine); if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL) @@ -2364,11 +2397,16 @@ CONFIGRET WINAPI CM_Get_Class_Key_Name_ExA( /*********************************************************************** * CM_Get_Class_Key_Name_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Class_Key_Name_ExW( - LPGUID ClassGuid, LPWSTR pszKeyName, PULONG pulLength, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Class_Key_Name_ExW( + _In_ LPGUID ClassGuid, + _Out_writes_opt_(*pulLength) LPWSTR pszKeyName, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { - TRACE("%p %p %p %lx %lx\n", + TRACE("CM_Get_Class_Key_Name_ExW(%p %p %p %lx %lx)\n", ClassGuid, pszKeyName, pulLength, ulFlags, hMachine); if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL) @@ -2395,10 +2433,17 @@ CONFIGRET WINAPI CM_Get_Class_Key_Name_ExW( /*********************************************************************** * CM_Get_Class_NameA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Class_NameA( - LPGUID ClassGuid, PCHAR Buffer, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Class_NameA( + _In_ LPGUID ClassGuid, + _Out_writes_opt_(*pulLength) PCHAR Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%p %p %p %lx\n", ClassGuid, Buffer, pulLength, ulFlags); + TRACE("CM_Get_Class_NameA(%p %p %p %lx)\n", + ClassGuid, Buffer, pulLength, ulFlags); + return CM_Get_Class_Name_ExA(ClassGuid, Buffer, pulLength, ulFlags, NULL); } @@ -2407,10 +2452,17 @@ CONFIGRET WINAPI CM_Get_Class_NameA( /*********************************************************************** * CM_Get_Class_NameW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Class_NameW( - LPGUID ClassGuid, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Class_NameW( + _In_ LPGUID ClassGuid, + _Out_writes_opt_(*pulLength) PWCHAR Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%p %p %p %lx\n", ClassGuid, Buffer, pulLength, ulFlags); + TRACE("CM_Get_Class_NameW(%p %p %p %lx)\n", + ClassGuid, Buffer, pulLength, ulFlags); + return CM_Get_Class_Name_ExW(ClassGuid, Buffer, pulLength, ulFlags, NULL); } @@ -2419,16 +2471,21 @@ CONFIGRET WINAPI CM_Get_Class_NameW( /*********************************************************************** * CM_Get_Class_Name_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Class_Name_ExA( - LPGUID ClassGuid, PCHAR Buffer, PULONG pulLength, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Class_Name_ExA( + _In_ LPGUID ClassGuid, + _Out_writes_opt_(*pulLength) PCHAR Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { WCHAR szBuffer[MAX_CLASS_NAME_LEN]; CONFIGRET ret = CR_SUCCESS; ULONG ulLength; ULONG ulOrigLength; - TRACE("%p %p %p %lx %lx\n", + TRACE("CM_Get_Class_Name_ExA(%p %p %p %lx %lx)\n", ClassGuid, Buffer, pulLength, ulFlags, hMachine); if (ClassGuid == NULL || Buffer == NULL || pulLength == NULL) @@ -2462,16 +2519,20 @@ CONFIGRET WINAPI CM_Get_Class_Name_ExA( /*********************************************************************** * CM_Get_Class_Name_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI +CONFIGRET +WINAPI CM_Get_Class_Name_ExW( - LPGUID ClassGuid, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags, - HMACHINE hMachine) + _In_ LPGUID ClassGuid, + _Out_writes_opt_(*pulLength) PWCHAR Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { WCHAR szGuidString[MAX_GUID_STRING_LEN]; RPC_BINDING_HANDLE BindingHandle = NULL; CONFIGRET ret; - TRACE("%p %p %p %lx %lx\n", + TRACE("CM_Get_Class_Name_ExW(%p %p %p %lx %lx\n", ClassGuid, Buffer, pulLength, ulFlags, hMachine); if (ClassGuid == NULL || Buffer == NULL || pulLength == NULL) @@ -2518,16 +2579,23 @@ CM_Get_Class_Name_ExW( /*********************************************************************** * CM_Get_Class_Registry_PropertyA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Class_Registry_PropertyA( - LPGUID ClassGuid, ULONG ulProperty, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Class_Registry_PropertyA( + LPGUID ClassGuid, + ULONG ulProperty, + PULONG pulRegDataType, + PVOID Buffer, + PULONG pulLength, + ULONG ulFlags, + HMACHINE hMachine) { PWSTR BufferW = NULL; ULONG ulLength = 0; ULONG ulType; CONFIGRET ret; - TRACE("%p %lu %p %p %p %lx %lx\n", + TRACE("CM_Get_Class_Registry_PropertyA(%p %lu %p %p %p %lx %lx)\n", ClassGuid, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags, hMachine); @@ -2590,9 +2658,16 @@ CONFIGRET WINAPI CM_Get_Class_Registry_PropertyA( /*********************************************************************** * CM_Get_Class_Registry_PropertyW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Class_Registry_PropertyW( - LPGUID ClassGuid, ULONG ulProperty, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Class_Registry_PropertyW( + LPGUID ClassGuid, + ULONG ulProperty, + PULONG pulRegDataType, + PVOID Buffer, + PULONG pulLength, + ULONG ulFlags, + HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; WCHAR szGuidString[PNP_MAX_GUID_STRING_LEN + 1]; @@ -2600,7 +2675,7 @@ CONFIGRET WINAPI CM_Get_Class_Registry_PropertyW( ULONG ulTransferLength = 0; CONFIGRET ret; - TRACE("%p %lu %p %p %p %lx %lx\n", + TRACE("CM_Get_Class_Registry_PropertyW(%p %lu %p %p %p %lx %lx)\n", ClassGuid, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags, hMachine); @@ -2662,10 +2737,16 @@ CONFIGRET WINAPI CM_Get_Class_Registry_PropertyW( /*********************************************************************** * CM_Get_Depth [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Depth( - PULONG pulDepth, DEVINST dnDevInst, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Depth( + _Out_ PULONG pulDepth, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags) { - TRACE("%p %lx %lx\n", pulDepth, dnDevInst, ulFlags); + TRACE("CM_Get_Depth(%p %lx %lx)\n", + pulDepth, dnDevInst, ulFlags); + return CM_Get_Depth_Ex(pulDepth, dnDevInst, ulFlags, NULL); } @@ -2673,15 +2754,20 @@ CONFIGRET WINAPI CM_Get_Depth( /*********************************************************************** * CM_Get_Depth_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Depth_Ex( - PULONG pulDepth, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Depth_Ex( + _Out_ PULONG pulDepth, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; LPWSTR lpDevInst; CONFIGRET ret; - TRACE("%p %lx %lx %lx\n", + TRACE("CM_Get_Depth_Ex(%p %lx %lx %lx)\n", pulDepth, dnDevInst, ulFlags, hMachine); if (pulDepth == NULL) @@ -2733,12 +2819,20 @@ CONFIGRET WINAPI CM_Get_Depth_Ex( /*********************************************************************** * CM_Get_DevNode_Custom_PropertyA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyA( - DEVINST dnDevInst, PCSTR pszCustomPropertyName, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_DevNode_Custom_PropertyA( + _In_ DEVINST dnDevInst, + _In_ PCSTR pszCustomPropertyName, + _Out_opt_ PULONG pulRegDataType, + _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%lx %s %p %p %p %lx\n", dnDevInst, pszCustomPropertyName, - pulRegDataType, Buffer, pulLength, ulFlags); + TRACE("CM_Get_DevNode_Custom_PropertyA(%lx %s %p %p %p %lx)\n", + dnDevInst, pszCustomPropertyName, pulRegDataType, + Buffer, pulLength, ulFlags); + return CM_Get_DevNode_Custom_Property_ExA(dnDevInst, pszCustomPropertyName, pulRegDataType, Buffer, pulLength, ulFlags, NULL); @@ -2748,12 +2842,20 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyA( /*********************************************************************** * CM_Get_DevNode_Custom_PropertyW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyW( - DEVINST dnDevInst, PCWSTR pszCustomPropertyName, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_DevNode_Custom_PropertyW( + _In_ DEVINST dnDevInst, + _In_ PCWSTR pszCustomPropertyName, + _Out_opt_ PULONG pulRegDataType, + _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%lx %s %p %p %p %lx\n", dnDevInst, debugstr_w(pszCustomPropertyName), - pulRegDataType, Buffer, pulLength, ulFlags); + TRACE("CM_Get_DevNode_Custom_PropertyW(%lx %s %p %p %p %lx)\n", + dnDevInst, debugstr_w(pszCustomPropertyName), pulRegDataType, + Buffer, pulLength, ulFlags); + return CM_Get_DevNode_Custom_Property_ExW(dnDevInst, pszCustomPropertyName, pulRegDataType, Buffer, pulLength, ulFlags, NULL); @@ -2763,9 +2865,16 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyW( /*********************************************************************** * CM_Get_DevNode_Custom_Property_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExA( - DEVINST dnDevInst, PCSTR pszCustomPropertyName, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_DevNode_Custom_Property_ExA( + _In_ DEVINST dnDevInst, + _In_ PCSTR pszCustomPropertyName, + _Out_opt_ PULONG pulRegDataType, + _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { LPWSTR pszPropertyNameW = NULL; PVOID BufferW; @@ -2773,8 +2882,9 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExA( ULONG ulDataType = REG_NONE; CONFIGRET ret; - TRACE("%lx %s %p %p %p %lx %p\n", dnDevInst, pszCustomPropertyName, - pulRegDataType, Buffer, pulLength, ulFlags, hMachine); + TRACE("CM_Get_DevNode_Custom_Property_ExA(%lx %s %p %p %p %lx %p)\n", + dnDevInst, pszCustomPropertyName, pulRegDataType, + Buffer, pulLength, ulFlags, hMachine); if (!pulLength) return CR_INVALID_POINTER; @@ -2843,9 +2953,16 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExA( /*********************************************************************** * CM_Get_DevNode_Custom_Property_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExW( - DEVINST dnDevInst, PCWSTR pszCustomPropertyName, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_DevNode_Custom_Property_ExW( + _In_ DEVINST dnDevInst, + _In_ PCWSTR pszCustomPropertyName, + _Out_opt_ PULONG pulRegDataType, + _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; @@ -2854,9 +2971,9 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExW( ULONG ulTransferLength; CONFIGRET ret = CR_SUCCESS; - TRACE("%lx %s %p %p %p %lx %p\n", dnDevInst, - debugstr_w(pszCustomPropertyName), pulRegDataType, Buffer, - pulLength, ulFlags, hMachine); + TRACE("CM_Get_DevNode_Custom_Property_ExW(%lx %s %p %p %p %lx %p)\n", + dnDevInst, debugstr_w(pszCustomPropertyName), pulRegDataType, + Buffer, pulLength, ulFlags, hMachine); if (dnDevInst == 0) return CR_INVALID_DEVNODE; @@ -2921,11 +3038,17 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExW( /*********************************************************************** * CM_Get_DevNode_Registry_PropertyA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA( - DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_DevNode_Registry_PropertyA( + _In_ DEVINST dnDevInst, + _In_ ULONG ulProperty, + _Out_opt_ PULONG pulRegDataType, + _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%lx %lu %p %p %p %lx\n", + TRACE("CM_Get_DevNode_Registry_PropertyA(%lx %lu %p %p %p %lx)\n", dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags); return CM_Get_DevNode_Registry_Property_ExA(dnDevInst, ulProperty, @@ -2937,11 +3060,17 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA( /*********************************************************************** * CM_Get_DevNode_Registry_PropertyW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW( - DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_DevNode_Registry_PropertyW( + _In_ DEVINST dnDevInst, + _In_ ULONG ulProperty, + _Out_opt_ PULONG pulRegDataType, + _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%lx %lu %p %p %p %lx\n", + TRACE("CM_Get_DevNode_Registry_PropertyW(%lx %lu %p %p %p %lx)\n", dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags); return CM_Get_DevNode_Registry_Property_ExW(dnDevInst, ulProperty, @@ -2953,16 +3082,23 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW( /*********************************************************************** * CM_Get_DevNode_Registry_Property_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExA( - DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_DevNode_Registry_Property_ExA( + _In_ DEVINST dnDevInst, + _In_ ULONG ulProperty, + _Out_opt_ PULONG pulRegDataType, + _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { PVOID BufferW; ULONG LengthW; ULONG ulDataType = REG_NONE; CONFIGRET ret; - TRACE("%lx %lu %p %p %p %lx %lx\n", + TRACE("CM_Get_DevNode_Registry_Property_ExA(%lx %lu %p %p %p %lx %lx)\n", dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags, hMachine); @@ -3026,9 +3162,16 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExA( /*********************************************************************** * CM_Get_DevNode_Registry_Property_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW( - DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType, - PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_DevNode_Registry_Property_ExW( + _In_ DEVINST dnDevInst, + _In_ ULONG ulProperty, + _Out_opt_ PULONG pulRegDataType, + _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; @@ -3037,7 +3180,7 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW( ULONG ulDataType = REG_NONE; ULONG ulTransferLength = 0; - TRACE("%lx %lu %p %p %p %lx %lx\n", + TRACE("CM_Get_DevNode_Registry_Property_ExW(%lx %lu %p %p %p %lx %lx)\n", dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags, hMachine); @@ -3112,12 +3255,17 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW( /*********************************************************************** * CM_Get_DevNode_Status [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_DevNode_Status( - PULONG pulStatus, PULONG pulProblemNumber, DEVINST dnDevInst, - ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_DevNode_Status( + _Out_ PULONG pulStatus, + _Out_ PULONG pulProblemNumber, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags) { - TRACE("%p %p %lx %lx\n", + TRACE("CM_Get_DevNode_Status(%p %p %lx %lx)\n", pulStatus, pulProblemNumber, dnDevInst, ulFlags); + return CM_Get_DevNode_Status_Ex(pulStatus, pulProblemNumber, dnDevInst, ulFlags, NULL); } @@ -3126,17 +3274,21 @@ CONFIGRET WINAPI CM_Get_DevNode_Status( /*********************************************************************** * CM_Get_DevNode_Status_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI +CONFIGRET +WINAPI CM_Get_DevNode_Status_Ex( - PULONG pulStatus, PULONG pulProblemNumber, DEVINST dnDevInst, - ULONG ulFlags, HMACHINE hMachine) + _Out_ PULONG pulStatus, + _Out_ PULONG pulProblemNumber, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; LPWSTR lpDevInst; CONFIGRET ret; - TRACE("%p %p %lx %lx %lx\n", + TRACE("CM_Get_DevNode_Status_Ex(%p %p %lx %lx %lx)\n", pulStatus, pulProblemNumber, dnDevInst, ulFlags, hMachine); if (pulStatus == NULL || pulProblemNumber == NULL) @@ -3189,11 +3341,17 @@ CM_Get_DevNode_Status_Ex( /*********************************************************************** * CM_Get_Device_IDA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_IDA( - DEVINST dnDevInst, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_IDA( + _In_ DEVINST dnDevInst, + _Out_writes_(BufferLen) PCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags) { - TRACE("%lx %p %ld %ld\n", + TRACE("CM_Get_Device_IDA(%lx %p %ld %lx)\n", dnDevInst, Buffer, BufferLen, ulFlags); + return CM_Get_Device_ID_ExA(dnDevInst, Buffer, BufferLen, ulFlags, NULL); } @@ -3201,11 +3359,17 @@ CONFIGRET WINAPI CM_Get_Device_IDA( /*********************************************************************** * CM_Get_Device_IDW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_IDW( - DEVINST dnDevInst, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_IDW( + _In_ DEVINST dnDevInst, + _Out_writes_(BufferLen) PWCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags) { - TRACE("%lx %p %ld %ld\n", + TRACE("CM_Get_Device_IDW(%lx %p %ld %lx)\n", dnDevInst, Buffer, BufferLen, ulFlags); + return CM_Get_Device_ID_ExW(dnDevInst, Buffer, BufferLen, ulFlags, NULL); } @@ -3213,14 +3377,19 @@ CONFIGRET WINAPI CM_Get_Device_IDW( /*********************************************************************** * CM_Get_Device_ID_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_ExA( - DEVINST dnDevInst, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_ID_ExA( + _In_ DEVINST dnDevInst, + _Out_writes_(BufferLen) PCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { WCHAR szBufferW[MAX_DEVICE_ID_LEN]; CONFIGRET ret = CR_SUCCESS; - TRACE("%lx %p %ld %ld %lx\n", + TRACE("CM_Get_Device_ID_ExA(%lx %p %ld %ld %lx)\n", dnDevInst, Buffer, BufferLen, ulFlags, hMachine); if (Buffer == NULL) @@ -3251,13 +3420,18 @@ CONFIGRET WINAPI CM_Get_Device_ID_ExA( /*********************************************************************** * CM_Get_Device_ID_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_ExW( - DEVINST dnDevInst, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_ID_ExW( + _In_ DEVINST dnDevInst, + _Out_writes_(BufferLen) PWCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { HSTRING_TABLE StringTable = NULL; - TRACE("%lx %p %ld %ld %lx\n", + TRACE("CM_Get_Device_ID_ExW(%lx %p %ld %lx %lx)\n", dnDevInst, Buffer, BufferLen, ulFlags, hMachine); if (dnDevInst == 0) @@ -3294,10 +3468,17 @@ CONFIGRET WINAPI CM_Get_Device_ID_ExW( /*********************************************************************** * CM_Get_Device_ID_ListA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_ListA( - PCSTR pszFilter, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_ID_ListA( + _In_ PCSTR pszFilter, + _Out_writes_(BufferLen) PCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags) { - TRACE("%p %p %ld %ld\n", pszFilter, Buffer, BufferLen, ulFlags); + TRACE("CM_Get_Device_ID_ListA(%p %p %ld %lx)\n", + pszFilter, Buffer, BufferLen, ulFlags); + return CM_Get_Device_ID_List_ExA(pszFilter, Buffer, BufferLen, ulFlags, NULL); } @@ -3306,10 +3487,17 @@ CONFIGRET WINAPI CM_Get_Device_ID_ListA( /*********************************************************************** * CM_Get_Device_ID_ListW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_ListW( - PCWSTR pszFilter, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_ID_ListW( + _In_ PCWSTR pszFilter, + _Out_writes_(BufferLen) PWCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags) { - TRACE("%p %p %ld %ld\n", pszFilter, Buffer, BufferLen, ulFlags); + TRACE("CM_Get_Device_ID_ListW(%p %p %ld %lx)\n", + pszFilter, Buffer, BufferLen, ulFlags); + return CM_Get_Device_ID_List_ExW(pszFilter, Buffer, BufferLen, ulFlags, NULL); } @@ -3318,15 +3506,20 @@ CONFIGRET WINAPI CM_Get_Device_ID_ListW( /*********************************************************************** * CM_Get_Device_ID_List_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_List_ExA( - PCSTR pszFilter, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_ID_List_ExA( + _In_ PCSTR pszFilter, + _Out_writes_(BufferLen) PCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { LPWSTR BufferW = NULL; LPWSTR pszFilterW = NULL; CONFIGRET ret = CR_SUCCESS; - TRACE("%p %p %ld %ld %lx\n", + TRACE("CM_Get_Device_ID_List_ExA(%p %p %ld %lx %lx)\n", pszFilter, Buffer, BufferLen, ulFlags, hMachine); BufferW = MyMalloc(BufferLen * sizeof(WCHAR)); @@ -3378,14 +3571,19 @@ Done: /*********************************************************************** * CM_Get_Device_ID_List_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_List_ExW( - PCWSTR pszFilter, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags, - HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_ID_List_ExW( + _In_ PCWSTR pszFilter, + _Out_writes_(BufferLen) PWCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; CONFIGRET ret; - TRACE("%p %p %ld %ld %lx\n", + TRACE("CM_Get_Device_ID_List_ExW(%p %p %ld %lx %lx)\n", pszFilter, Buffer, BufferLen, ulFlags, hMachine); if (Buffer == NULL || BufferLen == 0) @@ -3429,10 +3627,16 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_ExW( /*********************************************************************** * CM_Get_Device_ID_List_SizeA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA( - PULONG pulLen, PCSTR pszFilter, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_ID_List_SizeA( + _Out_ PULONG pulLen, + _In_opt_ PCSTR pszFilter, + _In_ ULONG ulFlags) { - TRACE("%p %s %ld\n", pulLen, pszFilter, ulFlags); + TRACE("CM_Get_Device_ID_List_SizeA(%p %s %lx)\n", + pulLen, debugstr_a(pszFilter), ulFlags); + return CM_Get_Device_ID_List_Size_ExA(pulLen, pszFilter, ulFlags, NULL); } @@ -3440,10 +3644,16 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA( /*********************************************************************** * CM_Get_Device_ID_List_SizeW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW( - PULONG pulLen, PCWSTR pszFilter, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_ID_List_SizeW( + _Out_ PULONG pulLen, + _In_opt_ PCWSTR pszFilter, + _In_ ULONG ulFlags) { - TRACE("%p %s %ld\n", pulLen, debugstr_w(pszFilter), ulFlags); + TRACE("CM_Get_Device_ID_List_SizeW(%p %s %lx)\n", + pulLen, debugstr_w(pszFilter), ulFlags); + return CM_Get_Device_ID_List_Size_ExW(pulLen, pszFilter, ulFlags, NULL); } @@ -3451,13 +3661,19 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW( /*********************************************************************** * CM_Get_Device_ID_List_Size_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA( - PULONG pulLen, PCSTR pszFilter, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_ID_List_Size_ExA( + _Out_ PULONG pulLen, + _In_opt_ PCSTR pszFilter, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { LPWSTR pszFilterW = NULL; CONFIGRET ret = CR_SUCCESS; - FIXME("%p %s %lx %lx\n", pulLen, pszFilter, ulFlags, hMachine); + FIXME("CM_Get_Device_ID_List_Size_ExA(%p %s %lx %lx)\n", + pulLen, debugstr_a(pszFilter), ulFlags, hMachine); if (pszFilter == NULL) { @@ -3486,13 +3702,19 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA( /*********************************************************************** * CM_Get_Device_ID_List_Size_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW( - PULONG pulLen, PCWSTR pszFilter, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_ID_List_Size_ExW( + _Out_ PULONG pulLen, + _In_opt_ PCWSTR pszFilter, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; CONFIGRET ret; - FIXME("%p %s %ld %lx\n", pulLen, debugstr_w(pszFilter), ulFlags, hMachine); + FIXME("CM_Get_Device_ID_List_Size_ExW(%p %s %lx %lx)\n", + pulLen, debugstr_w(pszFilter), ulFlags, hMachine); if (pulLen == NULL) return CR_INVALID_POINTER; @@ -3534,10 +3756,16 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW( /*********************************************************************** * CM_Get_Device_ID_Size [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_Size( - PULONG pulLen, DEVINST dnDevInst, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_ID_Size( + _Out_ PULONG pulLen, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags) { - TRACE("%p %lx %lx\n", pulLen, dnDevInst, ulFlags); + TRACE("CM_Get_Device_ID_Size(%p %lx %lx)\n", + pulLen, dnDevInst, ulFlags); + return CM_Get_Device_ID_Size_Ex(pulLen, dnDevInst, ulFlags, NULL); } @@ -3545,13 +3773,19 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size( /*********************************************************************** * CM_Get_Device_ID_Size_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex( - PULONG pulLen, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_ID_Size_Ex( + _Out_ PULONG pulLen, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { HSTRING_TABLE StringTable = NULL; LPWSTR DeviceId; - TRACE("%p %lx %lx %lx\n", pulLen, dnDevInst, ulFlags, hMachine); + TRACE("CM_Get_Device_ID_Size_Ex(%p %lx %lx %lx)\n", + pulLen, dnDevInst, ulFlags, hMachine); if (pulLen == NULL) return CR_INVALID_POINTER; @@ -3590,11 +3824,17 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex( /*********************************************************************** * CM_Get_Device_Interface_AliasA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_Interface_AliasA( - LPCSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, - LPSTR pszAliasDeviceInterface, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_Interface_AliasA( + _In_ LPCSTR pszDeviceInterface, + _In_ LPGUID AliasInterfaceGuid, + _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid, + TRACE("CM_Get_Device_Interface_AliasA(%p %p %p %p %lx)\n", + pszDeviceInterface, AliasInterfaceGuid, pszAliasDeviceInterface, pulLength, ulFlags); return CM_Get_Device_Interface_Alias_ExA(pszDeviceInterface, @@ -3606,11 +3846,17 @@ CONFIGRET WINAPI CM_Get_Device_Interface_AliasA( /*********************************************************************** * CM_Get_Device_Interface_AliasW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_Interface_AliasW( - LPCWSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, - LPWSTR pszAliasDeviceInterface, PULONG pulLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_Interface_AliasW( + _In_ LPCWSTR pszDeviceInterface, + _In_ LPGUID AliasInterfaceGuid, + _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags) { - TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid, + TRACE("CM_Get_Device_Interface_AliasW(%p %p %p %p %lx)\n", + pszDeviceInterface, AliasInterfaceGuid, pszAliasDeviceInterface, pulLength, ulFlags); return CM_Get_Device_Interface_Alias_ExW(pszDeviceInterface, @@ -3622,11 +3868,18 @@ CONFIGRET WINAPI CM_Get_Device_Interface_AliasW( /*********************************************************************** * CM_Get_Device_Interface_Alias_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExA( - LPCSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, LPSTR pszAliasDeviceInterface, - PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_Interface_Alias_ExA( + _In_ LPCSTR pszDeviceInterface, + _In_ LPGUID AliasInterfaceGuid, + _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { - FIXME("%p %p %p %p %lu %lx\n", pszDeviceInterface, AliasInterfaceGuid, + FIXME("CM_Get_Device_Interface_Alias_ExA(%p %p %p %p %lx %lx)\n", + pszDeviceInterface, AliasInterfaceGuid, pszAliasDeviceInterface, pulLength, ulFlags, hMachine); return CR_CALL_NOT_IMPLEMENTED; @@ -3636,15 +3889,22 @@ CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExA( /*********************************************************************** * CM_Get_Device_Interface_Alias_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExW( - LPCWSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, LPWSTR pszAliasDeviceInterface, - PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_Interface_Alias_ExW( + _In_ LPCWSTR pszDeviceInterface, + _In_ LPGUID AliasInterfaceGuid, + _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface, + _Inout_ PULONG pulLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; ULONG ulTransferLength; CONFIGRET ret = CR_SUCCESS; - TRACE("%p %p %p %p %lu %lx\n", pszDeviceInterface, AliasInterfaceGuid, + TRACE("CM_Get_Device_Interface_Alias_ExW(%p %p %p %p %lx %lx)\n", + pszDeviceInterface, AliasInterfaceGuid, pszAliasDeviceInterface, pulLength, ulFlags, hMachine); if (pszDeviceInterface == NULL || @@ -3693,12 +3953,18 @@ CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExW( /*********************************************************************** * CM_Get_Device_Interface_ListA (SETUPAPI.@) */ -CONFIGRET WINAPI CM_Get_Device_Interface_ListA( - LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceID, PCHAR Buffer, - ULONG BufferLen, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_Interface_ListA( + _In_ LPGUID InterfaceClassGuid, + _In_opt_ DEVINSTID_A pDeviceID, + _Out_writes_(BufferLen) PCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags) { - TRACE("%s %s %p %lu 0x%08lx\n", debugstr_guid(InterfaceClassGuid), - pDeviceID, Buffer, BufferLen, ulFlags); + TRACE("CM_Get_Device_Interface_ListA(%s %s %p %lu 0x%08lx)\n", + debugstr_guid(InterfaceClassGuid), debugstr_a(pDeviceID), + Buffer, BufferLen, ulFlags); return CM_Get_Device_Interface_List_ExA(InterfaceClassGuid, pDeviceID, Buffer, BufferLen, ulFlags, NULL); @@ -3708,12 +3974,18 @@ CONFIGRET WINAPI CM_Get_Device_Interface_ListA( /*********************************************************************** * CM_Get_Device_Interface_ListW (SETUPAPI.@) */ -CONFIGRET WINAPI CM_Get_Device_Interface_ListW( - LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceID, PWCHAR Buffer, - ULONG BufferLen, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_Interface_ListW( + _In_ LPGUID InterfaceClassGuid, + _In_opt_ DEVINSTID_W pDeviceID, + _Out_writes_(BufferLen) PWCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags) { - TRACE("%s %s %p %lu 0x%08lx\n", debugstr_guid(InterfaceClassGuid), - debugstr_w(pDeviceID), Buffer, BufferLen, ulFlags); + TRACE("CM_Get_Device_Interface_ListW(%s %s %p %lu 0x%08lx)\n", + debugstr_guid(InterfaceClassGuid), debugstr_w(pDeviceID), + Buffer, BufferLen, ulFlags); return CM_Get_Device_Interface_List_ExW(InterfaceClassGuid, pDeviceID, Buffer, BufferLen, ulFlags, NULL); @@ -3723,16 +3995,23 @@ CONFIGRET WINAPI CM_Get_Device_Interface_ListW( /*********************************************************************** * CM_Get_Device_Interface_List_ExA (SETUPAPI.@) */ -CONFIGRET WINAPI CM_Get_Device_Interface_List_ExA( - LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceID, PCHAR Buffer, - ULONG BufferLen, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_Interface_List_ExA( + _In_ LPGUID InterfaceClassGuid, + _In_opt_ DEVINSTID_A pDeviceID, + _Out_writes_(BufferLen) PCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { DEVINSTID_W pDeviceIdW = NULL; PWCHAR BufferW = NULL; CONFIGRET ret = CR_SUCCESS; - TRACE("%s %s %p %lu 0x%08lx %p\n", debugstr_guid(InterfaceClassGuid), - pDeviceID, Buffer, BufferLen, ulFlags, hMachine); + TRACE("CM_Get_Device_Interface_List_ExA(%s %s %p %lu 0x%08lx %p)\n", + debugstr_guid(InterfaceClassGuid), debugstr_a(pDeviceID), + Buffer, BufferLen, ulFlags, hMachine); if (Buffer == NULL || BufferLen == 0) @@ -3781,16 +4060,23 @@ Done: /*********************************************************************** * CM_Get_Device_Interface_List_ExW (SETUPAPI.@) */ -CONFIGRET WINAPI CM_Get_Device_Interface_List_ExW( - LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceID, PWCHAR Buffer, - ULONG BufferLen, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_Interface_List_ExW( + _In_ LPGUID InterfaceClassGuid, + _In_opt_ DEVINSTID_W pDeviceID, + _Out_writes_(BufferLen) PWCHAR Buffer, + _In_ ULONG BufferLen, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; PNP_RPC_BUFFER_SIZE BufferSize = 0; CONFIGRET ret = CR_SUCCESS; - TRACE("%s %s %p %lu 0x%08lx %p\n", debugstr_guid(InterfaceClassGuid), - debugstr_w(pDeviceID), Buffer, BufferLen, ulFlags, hMachine); + TRACE("CM_Get_Device_Interface_List_ExW(%s %s %p %lu 0x%08lx %p)\n", + debugstr_guid(InterfaceClassGuid), debugstr_w(pDeviceID), + Buffer, BufferLen, ulFlags, hMachine); if (Buffer == NULL || BufferLen == 0) @@ -3836,52 +4122,65 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_ExW( /*********************************************************************** * CM_Get_Device_Interface_List_SizeA (SETUPAPI.@) */ -CONFIGRET WINAPI CM_Get_Device_Interface_List_SizeA( - PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceId, - ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_Interface_List_SizeA( + _Out_ PULONG pulLen, + _In_ LPGUID InterfaceClassGuid, + _In_opt_ DEVINSTID_A pDeviceID, + _In_ ULONG ulFlags) { - TRACE("%p %p %s 0x%08lx\n", pulLen, InterfaceClassGuid, - pDeviceId, ulFlags); + TRACE("CM_Get_Device_Interface_List_SizeA(%p %p %s 0x%08lx)\n", + pulLen, InterfaceClassGuid, debugstr_a(pDeviceID), ulFlags); return CM_Get_Device_Interface_List_Size_ExA(pulLen, InterfaceClassGuid, - pDeviceId, ulFlags, NULL); + pDeviceID, ulFlags, NULL); } /*********************************************************************** * CM_Get_Device_Interface_List_SizeW (SETUPAPI.@) */ -CONFIGRET WINAPI CM_Get_Device_Interface_List_SizeW( - PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceId, - ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Device_Interface_List_SizeW( + _Out_ PULONG pulLen, + _In_ LPGUID InterfaceClassGuid, + _In_opt_ DEVINSTID_W pDeviceID, + _In_ ULONG ulFlags) { - TRACE("%p %p %s 0x%08lx\n", pulLen, InterfaceClassGuid, - debugstr_w(pDeviceId), ulFlags); + TRACE("CM_Get_Device_Interface_List_SizeW(%p %p %s 0x%08lx)\n", + pulLen, InterfaceClassGuid, debugstr_w(pDeviceID), ulFlags); return CM_Get_Device_Interface_List_Size_ExW(pulLen, InterfaceClassGuid, - pDeviceId, ulFlags, NULL); + pDeviceID, ulFlags, NULL); } /*********************************************************************** * CM_Get_Device_Interface_List_Size_ExA (SETUPAPI.@) */ -CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExA( - PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceId, - ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_Interface_List_Size_ExA( + _Out_ PULONG pulLen, + _In_ LPGUID InterfaceClassGuid, + _In_opt_ DEVINSTID_A pDeviceID, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { DEVINSTID_W pDeviceIdW = NULL; CONFIGRET ret = CR_SUCCESS; - TRACE("%p %p %s 0x%08lx %p\n", pulLen, InterfaceClassGuid, - pDeviceId, ulFlags, hMachine); + TRACE("CM_Get_Device_Interface_List_Size_ExA(%p %p %s 0x%08lx %p)\n", + pulLen, InterfaceClassGuid, debugstr_a(pDeviceID), ulFlags, hMachine); if (pulLen == NULL) return CR_INVALID_POINTER; - if (pDeviceId != NULL) + if (pDeviceID != NULL) { - if (!pSetupCaptureAndConvertAnsiArg(pDeviceId, &pDeviceIdW)) + if (!pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDeviceIdW)) return CR_INVALID_DEVICE_ID; } @@ -3900,15 +4199,20 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExA( /*********************************************************************** * CM_Get_Device_Interface_List_Size_ExW (SETUPAPI.@) */ -CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW( - PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceId, - ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Device_Interface_List_Size_ExW( + _Out_ PULONG pulLen, + _In_ LPGUID InterfaceClassGuid, + _In_opt_ DEVINSTID_W pDeviceID, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; CONFIGRET ret = CR_SUCCESS; - TRACE("%p %p %s 0x%08lx %p\n", pulLen, InterfaceClassGuid, - debugstr_w(pDeviceId), ulFlags, hMachine); + TRACE("CM_Get_Device_Interface_List_Size_ExW(%p %p %s 0x%08lx %p)\n", + pulLen, InterfaceClassGuid, debugstr_w(pDeviceID), ulFlags, hMachine); if (pulLen == NULL) return CR_INVALID_POINTER; @@ -3935,7 +4239,7 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW( ret = PNP_GetInterfaceDeviceListSize(BindingHandle, pulLen, InterfaceClassGuid, - pDeviceId, + pDeviceID, ulFlags); } RpcExcept(EXCEPTION_EXECUTE_HANDLER) @@ -3951,10 +4255,16 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW( /*********************************************************************** * CM_Get_First_Log_Conf [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_First_Log_Conf( - PLOG_CONF plcLogConf, DEVINST dnDevInst, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_First_Log_Conf( + _Out_opt_ PLOG_CONF plcLogConf, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags) { - TRACE("%p %lx %lx\n", plcLogConf, dnDevInst, ulFlags); + TRACE("CM_Get_First_Log_Conf(%p %lx %lx)\n", + plcLogConf, dnDevInst, ulFlags); + return CM_Get_First_Log_Conf_Ex(plcLogConf, dnDevInst, ulFlags, NULL); } @@ -3962,8 +4272,13 @@ CONFIGRET WINAPI CM_Get_First_Log_Conf( /*********************************************************************** * CM_Get_First_Log_Conf_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex( - PLOG_CONF plcLogConf, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_First_Log_Conf_Ex( + _Out_opt_ PLOG_CONF plcLogConf, + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; @@ -3972,7 +4287,8 @@ CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex( ULONG ulTag; PLOG_CONF_INFO pLogConfInfo; - FIXME("%p %lx %lx %lx\n", plcLogConf, dnDevInst, ulFlags, hMachine); + FIXME("CM_Get_First_Log_Conf_Ex(%p %lx %lx %lx)\n", + plcLogConf, dnDevInst, ulFlags, hMachine); if (dnDevInst == 0) return CR_INVALID_DEVINST; @@ -4041,10 +4357,15 @@ CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex( /*********************************************************************** * CM_Get_Global_State [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Global_State( - PULONG pulState, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_Global_State( + _Out_ PULONG pulState, + _In_ ULONG ulFlags) { - TRACE("%p %lx\n", pulState, ulFlags); + TRACE("CM_Get_Global_State(%p %lx)\n", + pulState, ulFlags); + return CM_Get_Global_State_Ex(pulState, ulFlags, NULL); } @@ -4052,13 +4373,18 @@ CONFIGRET WINAPI CM_Get_Global_State( /*********************************************************************** * CM_Get_Global_State_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_Global_State_Ex( - PULONG pulState, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_Global_State_Ex( + _Out_ PULONG pulState, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; CONFIGRET ret; - TRACE("%p %lx %lx\n", pulState, ulFlags, hMachine); + TRACE("CM_Get_Global_State_Ex(%p %lx %lx)\n", + pulState, ulFlags, hMachine); if (pulState == NULL) return CR_INVALID_POINTER; @@ -4095,12 +4421,16 @@ CONFIGRET WINAPI CM_Get_Global_State_Ex( /*********************************************************************** * CM_Get_HW_Prof_FlagsA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_HW_Prof_FlagsA( - DEVINSTID_A szDevInstName, ULONG ulHardwareProfile, PULONG pulValue, - ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_HW_Prof_FlagsA( + _In_ DEVINSTID_A szDevInstName, + _In_ ULONG ulHardwareProfile, + _Out_ PULONG pulValue, + _In_ ULONG ulFlags) { - TRACE("%s %lu %p %lx\n", szDevInstName, - ulHardwareProfile, pulValue, ulFlags); + TRACE("CM_Get_HW_Prof_FlagsA(%s %lu %p %lx)\n", + debugstr_a(szDevInstName), ulHardwareProfile, pulValue, ulFlags); return CM_Get_HW_Prof_Flags_ExA(szDevInstName, ulHardwareProfile, pulValue, ulFlags, NULL); @@ -4110,12 +4440,16 @@ CONFIGRET WINAPI CM_Get_HW_Prof_FlagsA( /*********************************************************************** * CM_Get_HW_Prof_FlagsW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_HW_Prof_FlagsW( - DEVINSTID_W szDevInstName, ULONG ulHardwareProfile, PULONG pulValue, - ULONG ulFlags) +CONFIGRET +WINAPI +CM_Get_HW_Prof_FlagsW( + _In_ DEVINSTID_W szDevInstName, + _In_ ULONG ulHardwareProfile, + _Out_ PULONG pulValue, + _In_ ULONG ulFlags) { - TRACE("%s %lu %p %lx\n", debugstr_w(szDevInstName), - ulHardwareProfile, pulValue, ulFlags); + TRACE("CM_Get_HW_Prof_FlagsW(%s %lu %p %lx)\n", + debugstr_w(szDevInstName), ulHardwareProfile, pulValue, ulFlags); return CM_Get_HW_Prof_Flags_ExW(szDevInstName, ulHardwareProfile, pulValue, ulFlags, NULL); @@ -4125,15 +4459,20 @@ CONFIGRET WINAPI CM_Get_HW_Prof_FlagsW( /*********************************************************************** * CM_Get_HW_Prof_Flags_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExA( - DEVINSTID_A szDevInstName, ULONG ulHardwareProfile, PULONG pulValue, - ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_HW_Prof_Flags_ExA( + _In_ DEVINSTID_A szDevInstName, + _In_ ULONG ulHardwareProfile, + _Out_ PULONG pulValue, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { DEVINSTID_W pszDevIdW = NULL; CONFIGRET ret = CR_SUCCESS; - TRACE("%s %lu %p %lx %lx\n", szDevInstName, - ulHardwareProfile, pulValue, ulFlags, hMachine); + TRACE("CM_Get_HW_Prof_Flags_ExA(%s %lu %p %lx %lx)\n", + debugstr_a(szDevInstName), ulHardwareProfile, pulValue, ulFlags, hMachine); if (szDevInstName != NULL) { @@ -4154,15 +4493,20 @@ CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExA( /*********************************************************************** * CM_Get_HW_Prof_Flags_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExW( - DEVINSTID_W szDevInstName, ULONG ulHardwareProfile, PULONG pulValue, - ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Get_HW_Prof_Flags_ExW( + _In_ DEVINSTID_W szDevInstName, + _In_ ULONG ulHardwareProfile, + _Out_ PULONG pulValue, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; CONFIGRET ret; - FIXME("%s %lu %p %lx %lx\n", debugstr_w(szDevInstName), - ulHardwareProfile, pulValue, ulFlags, hMachine); + FIXME("CM_Get_HW_Prof_Flags_ExW(%s %lu %p %lx %lx)\n", + debugstr_w(szDevInstName), ulHardwareProfile, pulValue, ulFlags, hMachine); if ((szDevInstName == NULL) || (pulValue == NULL)) return CR_INVALID_POINTER; @@ -4786,6 +5130,7 @@ CM_Intersect_Range_List( { FIXME("CM_Intersect_Range_List(%p %p %p %lx)\n", rlhOld1, rlhOld2, rlhNew, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; } @@ -4803,6 +5148,7 @@ CM_Invert_Range_List( { FIXME("CM_Invert_Range_List(%p %p %I64u %lx)\n", rlhOld, rlhNew, ullMaxValue, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; } @@ -4817,6 +5163,7 @@ CM_Is_Dock_Station_Present( { TRACE("CM_Is_Dock_Station_Present(%p)\n", pbPresent); + return CM_Is_Dock_Station_Present_Ex(pbPresent, NULL); } @@ -4878,6 +5225,7 @@ CM_Is_Version_Available( { TRACE("CM_Is_Version_Available(%hu)\n", wVersion); + return CM_Is_Version_Available_Ex(wVersion, NULL); } @@ -4942,6 +5290,7 @@ CM_Locate_DevNodeA( { TRACE("CM_Locate_DevNodeA(%p %s %lu)\n", pdnDevInst, pDeviceID, ulFlags); + return CM_Locate_DevNode_ExA(pdnDevInst, pDeviceID, ulFlags, NULL); } @@ -4958,6 +5307,7 @@ CM_Locate_DevNodeW( { TRACE("CM_Locate_DevNodeW(%p %s %lu)\n", pdnDevInst, debugstr_w(pDeviceID), ulFlags); + return CM_Locate_DevNode_ExW(pdnDevInst, pDeviceID, ulFlags, NULL); } @@ -5096,6 +5446,7 @@ CM_Merge_Range_List( { FIXME("CM_Merge_Range_List(%p %p %p %lx)\n", rlhOld1, rlhOld2, rlhNew, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; } @@ -5116,6 +5467,7 @@ CM_Modify_Res_Des( TRACE("CM_Modify_Res_Des(%p %p %lx %p %lu %lx)\n", prdResDes, rdResDes, ResourceID, ResourceData, ResourceLen, ulFlags); + return CM_Modify_Res_Des_Ex(prdResDes, rdResDes, ResourceID, ResourceData, ResourceLen, ulFlags, NULL); } @@ -5138,6 +5490,7 @@ CM_Modify_Res_Des_Ex( FIXME("CM_Modify_Res_Des_Ex(%p %p %lx %p %lu %lx %lx)\n", prdResDes, rdResDes, ResourceID, ResourceData, ResourceLen, ulFlags, hMachine); + return CR_CALL_NOT_IMPLEMENTED; } @@ -5154,6 +5507,7 @@ CM_Move_DevNode( { TRACE("CM_Move_DevNode(%lx %lx %lx)\n", dnFromDevInst, dnToDevInst, ulFlags); + return CM_Move_DevNode_Ex(dnFromDevInst, dnToDevInst, ulFlags, NULL); } @@ -5242,6 +5596,7 @@ CM_Next_Range( { FIXME("CM_Next_Range(%p %p %p %lx)\n", preElement, pullStart, pullEnd, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; } @@ -5445,6 +5800,7 @@ CM_Open_DevNode_Key( { TRACE("CM_Open_DevNode_Key(%lx %lx %lu %lx %p %lx)\n", dnDevNode, samDesired, ulHardwareProfile, Disposition, phkDevice, ulFlags); + return CM_Open_DevNode_Key_Ex(dnDevNode, samDesired, ulHardwareProfile, Disposition, phkDevice, ulFlags, NULL); } @@ -5601,12 +5957,17 @@ done: /*********************************************************************** * CM_Query_And_Remove_SubTreeA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Query_And_Remove_SubTreeA( - DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName, - ULONG ulNameLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Query_And_Remove_SubTreeA( + _In_ DEVINST dnAncestor, + _Out_opt_ PPNP_VETO_TYPE pVetoType, + _Out_writes_opt_(ulNameLength) LPSTR pszVetoName, + _In_ ULONG ulNameLength, + _In_ ULONG ulFlags) { - TRACE("%lx %p %s %lu %lx\n", dnAncestor, pVetoType, pszVetoName, - ulNameLength, ulFlags); + TRACE("CM_Query_And_Remove_SubTreeA(%lx %p %s %lu %lx)\n", + dnAncestor, pVetoType, pszVetoName, ulNameLength, ulFlags); return CM_Query_And_Remove_SubTree_ExA(dnAncestor, pVetoType, pszVetoName, ulNameLength, ulFlags, NULL); @@ -5616,12 +5977,17 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTreeA( /*********************************************************************** * CM_Query_And_Remove_SubTreeW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Query_And_Remove_SubTreeW( - DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, - ULONG ulNameLength, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Query_And_Remove_SubTreeW( + _In_ DEVINST dnAncestor, + _Out_opt_ PPNP_VETO_TYPE pVetoType, + _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName, + _In_ ULONG ulNameLength, + _In_ ULONG ulFlags) { - TRACE("%lx %p %s %lu %lx\n", dnAncestor, pVetoType, - debugstr_w(pszVetoName), ulNameLength, ulFlags); + TRACE("CM_Query_And_Remove_SubTreeW(%lx %p %s %lu %lx)\n", + dnAncestor, pVetoType, debugstr_w(pszVetoName), ulNameLength, ulFlags); return CM_Query_And_Remove_SubTree_ExW(dnAncestor, pVetoType, pszVetoName, ulNameLength, ulFlags, NULL); @@ -5631,15 +5997,22 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTreeW( /*********************************************************************** * CM_Query_And_Remove_SubTree_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExA( - DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName, - ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Query_And_Remove_SubTree_ExA( + _In_ DEVINST dnAncestor, + _Out_opt_ PPNP_VETO_TYPE pVetoType, + _Out_writes_opt_(ulNameLength) LPSTR pszVetoName, + _In_ ULONG ulNameLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { LPWSTR lpLocalVetoName; CONFIGRET ret; - TRACE("%lx %p %s %lu %lx %lx\n", dnAncestor, pVetoType, pszVetoName, - ulNameLength, ulFlags, hMachine); + TRACE("CM_Query_And_Remove_SubTree_ExA(%lx %p %s %lu %lx %lx)\n", + dnAncestor, pVetoType, debugstr_a(pszVetoName), ulNameLength, + ulFlags, hMachine); if (pszVetoName == NULL && ulNameLength == 0) return CR_INVALID_POINTER; @@ -5672,17 +6045,24 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExA( /*********************************************************************** * CM_Query_And_Remove_SubTree_ExW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExW( - DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, - ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Query_And_Remove_SubTree_ExW( + _In_ DEVINST dnAncestor, + _Out_opt_ PPNP_VETO_TYPE pVetoType, + _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName, + _In_ ULONG ulNameLength, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; LPWSTR lpDevInst; CONFIGRET ret; - TRACE("%lx %p %s %lu %lx %lx\n", dnAncestor, pVetoType, - debugstr_w(pszVetoName), ulNameLength, ulFlags, hMachine); + TRACE("CM_Query_And_Remove_SubTree_ExW(%lx %p %s %lu %lx %lx)\n", + dnAncestor, pVetoType, debugstr_w(pszVetoName), ulNameLength, + ulFlags, hMachine); if (dnAncestor == 0) return CR_INVALID_DEVNODE; @@ -5735,12 +6115,17 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExW( /*********************************************************************** * CM_Query_Arbitrator_Free_Data [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data( - PVOID pData, ULONG DataLen, DEVINST dnDevInst, RESOURCEID ResourceID, - ULONG ulFlags) +CONFIGRET +WINAPI +CM_Query_Arbitrator_Free_Data( + _Out_writes_bytes_(DataLen) PVOID pData, + _In_ ULONG DataLen, + _In_ DEVINST dnDevInst, + _In_ RESOURCEID ResourceID, + _In_ ULONG ulFlags) { - TRACE("%p %lu %lx %lu 0x%08lx\n", pData, DataLen, dnDevInst, - ResourceID, ulFlags); + TRACE("CM_Query_Arbitrator_Free_Data(%p %lu %lx %lu 0x%08lx)\n", + pData, DataLen, dnDevInst, ResourceID, ulFlags); return CM_Query_Arbitrator_Free_Data_Ex(pData, DataLen, dnDevInst, ResourceID, ulFlags, NULL); @@ -5750,21 +6135,23 @@ CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data( /*********************************************************************** * CM_Query_Arbitrator_Free_Data_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data_Ex( - OUT PVOID pData, - IN ULONG DataLen, - IN DEVINST dnDevInst, - IN RESOURCEID ResourceID, - IN ULONG ulFlags, - IN HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Query_Arbitrator_Free_Data_Ex( + _Out_writes_bytes_(DataLen) PVOID pData, + _In_ ULONG DataLen, + _In_ DEVINST dnDevInst, + _In_ RESOURCEID ResourceID, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; LPWSTR lpDevInst; CONFIGRET ret; - TRACE("%p %lu %lx %lu 0x%08lx %p\n", pData, DataLen, dnDevInst, - ResourceID, ulFlags, hMachine); + TRACE("CM_Query_Arbitrator_Free_Data_Ex(%p %lu %lx %lu 0x%08lx %p)\n", + pData, DataLen, dnDevInst, ResourceID, ulFlags, hMachine); if (pData == NULL || DataLen == 0) return CR_INVALID_POINTER; @@ -5817,10 +6204,16 @@ CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data_Ex( /*********************************************************************** * CM_Query_Arbitrator_Free_Size [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size( - PULONG pulSize, DEVINST dnDevInst, RESOURCEID ResourceID, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Query_Arbitrator_Free_Size( + _Out_ PULONG pulSize, + _In_ DEVINST dnDevInst, + _In_ RESOURCEID ResourceID, + _In_ ULONG ulFlags) { - TRACE("%p %lu %lx 0x%08lx\n", pulSize, dnDevInst,ResourceID, ulFlags); + TRACE("CM_Query_Arbitrator_Free_Size(%p %lu %lx 0x%08lx)\n", + pulSize, dnDevInst,ResourceID, ulFlags); return CM_Query_Arbitrator_Free_Size_Ex(pulSize, dnDevInst, ResourceID, ulFlags, NULL); @@ -5830,17 +6223,22 @@ CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size( /*********************************************************************** * CM_Query_Arbitrator_Free_Size_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size_Ex( - PULONG pulSize, DEVINST dnDevInst, RESOURCEID ResourceID, - ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Query_Arbitrator_Free_Size_Ex( + _Out_ PULONG pulSize, + _In_ DEVINST dnDevInst, + _In_ RESOURCEID ResourceID, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; LPWSTR lpDevInst; CONFIGRET ret; - TRACE("%p %lu %lx 0x%08lx %p\n", pulSize, dnDevInst,ResourceID, ulFlags, - hMachine); + TRACE("CM_Query_Arbitrator_Free_Size_Ex(%p %lu %lx 0x%08lx %p)\n", + pulSize, dnDevInst,ResourceID, ulFlags, hMachine); if (pulSize == NULL) return CR_INVALID_POINTER; @@ -5894,10 +6292,15 @@ CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size_Ex( * * This function is obsolete in Windows XP and above. */ -CONFIGRET WINAPI CM_Query_Remove_SubTree( - DEVINST dnAncestor, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Query_Remove_SubTree( + _In_ DEVINST dnAncestor, + _In_ ULONG ulFlags) { - TRACE("%lx %lx\n", dnAncestor, ulFlags); + TRACE("CM_Query_Remove_SubTree(%lx %lx)\n", + dnAncestor, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; } @@ -5907,10 +6310,16 @@ CONFIGRET WINAPI CM_Query_Remove_SubTree( * * This function is obsolete in Windows XP and above. */ -CONFIGRET WINAPI CM_Query_Remove_SubTree_Ex( - DEVINST dnAncestor, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Query_Remove_SubTree_Ex( + _In_ DEVINST dnAncestor, + _In_ ULONG ulFlags, + _In_opt_ HMACHINE hMachine) { - TRACE("%lx %lx %lx\n", dnAncestor, ulFlags, hMachine); + TRACE("CM_Query_Remove_SubTree_Ex(%lx %lx %lx)\n", + dnAncestor, ulFlags, hMachine); + return CR_CALL_NOT_IMPLEMENTED; } @@ -5918,10 +6327,15 @@ CONFIGRET WINAPI CM_Query_Remove_SubTree_Ex( /*********************************************************************** * CM_Reenumerate_DevNode [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Reenumerate_DevNode( - DEVINST dnDevInst, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Reenumerate_DevNode( + _In_ DEVINST dnDevInst, + _In_ ULONG ulFlags) { - TRACE("%lx %lx\n", dnDevInst, ulFlags); + TRACE("CM_Reenumerate_DevNode(%lx %lx)\n", + dnDevInst, ulFlags); + return CM_Reenumerate_DevNode_Ex(dnDevInst, ulFlags, NULL); } @@ -5933,14 +6347,15 @@ CONFIGRET WINAPI CM_Reenumerate_DevNode_Ex( _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, - _In_ HMACHINE hMachine) + _In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; HSTRING_TABLE StringTable = NULL; LPWSTR lpDevInst; CONFIGRET ret; - FIXME("%lx %lx %lx\n", dnDevInst, ulFlags, hMachine); + FIXME("CM_Reenumerate_DevNode_Ex(%lx %lx %lx)\n", + dnDevInst, ulFlags, hMachine); if (dnDevInst == 0) return CR_INVALID_DEVNODE; From e2c6c3cfc78d21fe955fcf7da88a97284f79622d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 17:18:25 +0100 Subject: [PATCH 12/15] [BROWSEUI] Shut a warning down ("windef.h(121) : warning RC4005: 'DECLSPEC_IMPORT' : redefinition" when compiling the resource). --- dll/win32/browseui/browseui.rc | 1 + 1 file changed, 1 insertion(+) diff --git a/dll/win32/browseui/browseui.rc b/dll/win32/browseui/browseui.rc index aa8c3435a90..030d614112f 100644 --- a/dll/win32/browseui/browseui.rc +++ b/dll/win32/browseui/browseui.rc @@ -22,6 +22,7 @@ #define _INC_WINDOWS #define COM_NO_WINDOWS_H #include +#undef DECLSPEC_IMPORT #include "resource.h" From a64c33e78795a39a11a7e8aa372d272642a6fb28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 17:19:40 +0100 Subject: [PATCH 13/15] [PSDK] Fix NIF_STATE definition and add NIF_GUID. --- sdk/include/psdk/shellapi.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/include/psdk/shellapi.h b/sdk/include/psdk/shellapi.h index 2e26e598687..ee35759c195 100644 --- a/sdk/include/psdk/shellapi.h +++ b/sdk/include/psdk/shellapi.h @@ -81,8 +81,8 @@ extern "C" { #define NIF_MESSAGE 1 #define NIF_ICON 2 #define NIF_TIP 4 -#define NIF_STATE 8 #if _WIN32_IE >= 0x0500 +#define NIF_STATE 8 #define NIF_INFO 16 #define NIS_HIDDEN 1 #define NIS_SHAREDICON 2 @@ -92,6 +92,7 @@ extern "C" { #define NIIF_ERROR 3 #define NIIF_USER 4 #if _WIN32_IE >= 0x0600 +#define NIF_GUID 32 #define NIIF_ICON_MASK 0xf #define NIIF_NOSOUND 0x10 #endif /* _WIN32_IE >= 0x0600 */ From 4207397963f4adaa3c19104e075646a9c3b956e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 17:21:58 +0100 Subject: [PATCH 14/15] [STOBJECT] Don't hardcode variable type in sizeof. --- dll/shellext/stobject/csystray.cpp | 2 +- dll/shellext/stobject/hotplug.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dll/shellext/stobject/csystray.cpp b/dll/shellext/stobject/csystray.cpp index 89bd5c5ac03..d1e51c116e6 100644 --- a/dll/shellext/stobject/csystray.cpp +++ b/dll/shellext/stobject/csystray.cpp @@ -125,7 +125,7 @@ HRESULT CSysTray::NotifyIcon(INT code, UINT uId, HICON hIcon, LPCWSTR szTip, DWO TRACE("NotifyIcon code=%d, uId=%d, hIcon=%p, szTip=%S\n", code, uId, hIcon, szTip); - nim.cbSize = sizeof(NOTIFYICONDATA); + nim.cbSize = sizeof(nim); nim.uFlags = NIF_MESSAGE | NIF_ICON | NIF_STATE | NIF_TIP; nim.hIcon = hIcon; nim.uID = uId; diff --git a/dll/shellext/stobject/hotplug.cpp b/dll/shellext/stobject/hotplug.cpp index 5c6d3099a80..9af5eef972a 100644 --- a/dll/shellext/stobject/hotplug.cpp +++ b/dll/shellext/stobject/hotplug.cpp @@ -101,7 +101,8 @@ HRESULT EnumHotpluggedDevices(CSimpleArray &devList) HRESULT NotifyBalloon(CSysTray* pSysTray, LPCWSTR szTitle = NULL, LPCWSTR szInfo = NULL, UINT uId = ID_ICON_HOTPLUG) { NOTIFYICONDATA nim = { 0 }; - nim.cbSize = sizeof(NOTIFYICONDATA); + + nim.cbSize = sizeof(nim); nim.uID = uId; nim.hWnd = pSysTray->GetHWnd(); From 131678a025601690d655e35ad4b968c1b98297c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 4 Feb 2018 18:02:41 +0100 Subject: [PATCH 15/15] [SHELL32] Rewrite the wrapping code for shell taskbar notifications. - Introduce the TRAYNOTIFYDATAW structure, as documented by Geoff Chappell in "WM_COPYDATA for Taskbar Interface", at http://www.geoffchappell.com/studies/windows/shell/shell32/api/shlnot/copydata.htm that is the data structure passed between shell32 and explorer for communicating shell notify icon information. - In Shell_NotifyIcon(), correctly capture the (ANSI and) UNICODE structures provided by the caller, properly taking into account for the different NOTIFYICONDATA structure sizes existing out there. The different strings are now properly null-terminated (especially szTip if it needs to be truncated out), and the flags validated. - Remove the now unneeded "SHELL_NotifyIcon()" helper function. [EXPLORER] Use TRAYNOTIFYDATAW and adjust the callers. --- base/shell/explorer/syspager.cpp | 45 +++---- dll/win32/shell32/precomp.h | 5 + dll/win32/shell32/systray.cpp | 221 ++++++++++++++++++++----------- sdk/include/reactos/undocshell.h | 31 ++++- 4 files changed, 195 insertions(+), 107 deletions(-) diff --git a/base/shell/explorer/syspager.cpp b/base/shell/explorer/syspager.cpp index 9ba0f2fc999..32d4b45c6c1 100644 --- a/base/shell/explorer/syspager.cpp +++ b/base/shell/explorer/syspager.cpp @@ -21,14 +21,6 @@ #include "precomp.h" -// Data comes from shell32/systray.cpp -> TrayNotifyCDS_Dummy -typedef struct _SYS_PAGER_COPY_DATA -{ - DWORD cookie; - DWORD notify_code; - NOTIFYICONDATA nicon_data; -} SYS_PAGER_COPY_DATA, *PSYS_PAGER_COPY_DATA; - struct InternalIconData : NOTIFYICONDATA { // Must keep a separate copy since the original is unioned with uTimeout. @@ -236,7 +228,7 @@ public: COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow) END_COM_MAP() - BOOL NotifyIcon(DWORD notify_code, _In_ CONST NOTIFYICONDATA *iconData); + BOOL NotifyIcon(DWORD dwMessage, _In_ CONST NOTIFYICONDATA *iconData); void GetSize(IN BOOL IsHorizontal, IN PSIZE size); DECLARE_WND_CLASS_EX(szSysPagerWndClass, CS_DBLCLKS, COLOR_3DFACE) @@ -454,22 +446,18 @@ UINT WINAPI CIconWatcher::WatcherThread(_In_opt_ LPVOID lpParam) TRACE("Pid %lu owns a notification icon and has stopped without deleting it. We'll cleanup on its behalf", Icon->ProcessId); - int len = FIELD_OFFSET(SYS_PAGER_COPY_DATA, nicon_data) + Icon->IconData.cbSize; - PSYS_PAGER_COPY_DATA pnotify_data = (PSYS_PAGER_COPY_DATA)new BYTE[len]; - pnotify_data->cookie = 1; - pnotify_data->notify_code = NIM_DELETE; - memcpy(&pnotify_data->nicon_data, &Icon->IconData, Icon->IconData.cbSize); + TRAYNOTIFYDATAW tnid = {0}; + tnid.dwSignature = NI_NOTIFY_SIG; + tnid.dwMessage = NIM_DELETE; + CopyMemory(&tnid.nid, &Icon->IconData, Icon->IconData.cbSize); COPYDATASTRUCT data; data.dwData = 1; - data.cbData = len; - data.lpData = pnotify_data; - - BOOL Success = FALSE; - ::SendMessage(This->m_hwndSysTray, WM_COPYDATA, (WPARAM)&Icon->IconData, (LPARAM)&data); - - delete pnotify_data; + data.cbData = sizeof(tnid); + data.lpData = &tnid; + BOOL Success = ::SendMessage(This->m_hwndSysTray, WM_COPYDATA, + (WPARAM)&Icon->IconData, (LPARAM)&data); if (!Success) { // If we failed to handle the delete message, forcibly remove it @@ -1263,14 +1251,14 @@ LRESULT CSysPagerWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& b return TRUE; } -BOOL CSysPagerWnd::NotifyIcon(DWORD notify_code, _In_ CONST NOTIFYICONDATA *iconData) +BOOL CSysPagerWnd::NotifyIcon(DWORD dwMessage, _In_ CONST NOTIFYICONDATA *iconData) { BOOL ret = FALSE; int VisibleButtonCount = Toolbar.GetVisibleButtonCount(); - TRACE("NotifyIcon received. Code=%d\n", notify_code); - switch (notify_code) + TRACE("NotifyIcon received. Code=%d\n", dwMessage); + switch (dwMessage) { case NIM_ADD: ret = Toolbar.AddButton(iconData); @@ -1295,7 +1283,7 @@ BOOL CSysPagerWnd::NotifyIcon(DWORD notify_code, _In_ CONST NOTIFYICONDATA *icon case NIM_SETVERSION: ret = Toolbar.SwitchVersion(iconData); default: - TRACE("NotifyIcon received with unknown code %d.\n", notify_code); + TRACE("NotifyIcon received with unknown code %d.\n", dwMessage); return FALSE; } @@ -1420,9 +1408,12 @@ LRESULT CSysPagerWnd::OnCopyData(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& PCOPYDATASTRUCT cpData = (PCOPYDATASTRUCT)lParam; if (cpData->dwData == 1) { - PSYS_PAGER_COPY_DATA pData = (PSYS_PAGER_COPY_DATA)cpData->lpData; - return NotifyIcon(pData->notify_code, &pData->nicon_data); + /* A taskbar NotifyIcon notification */ + PTRAYNOTIFYDATAW pData = (PTRAYNOTIFYDATAW)cpData->lpData; + if (pData->dwSignature == NI_NOTIFY_SIG) + return NotifyIcon(pData->dwMessage, &pData->nid); } + // TODO: Handle other types of taskbar notifications return FALSE; } diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h index 03166e37e6a..f059e5b0b94 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -17,6 +17,7 @@ #include #include #include + #include #include #include @@ -36,7 +37,11 @@ #include #include #include + +#include +#undef ShellExecute #include + #include #include diff --git a/dll/win32/shell32/systray.cpp b/dll/win32/shell32/systray.cpp index aa07708d4d6..482abf0e1b2 100644 --- a/dll/win32/shell32/systray.cpp +++ b/dll/win32/shell32/systray.cpp @@ -1,5 +1,6 @@ /* * Copyright 2004 Martin Fuchs + * Copyright 2018 Hermes Belusca-Maito * * Pass on icon notification messages to the systray implementation * in the currently running shell. @@ -23,91 +24,101 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); -/* copy data structure for tray notifications */ -typedef struct TrayNotifyCDS_Dummy { - DWORD cookie; - DWORD notify_code; - DWORD nicon_data[1]; // placeholder for NOTIFYICONDATA structure -} TrayNotifyCDS_Dummy; - -/* The only difference between Shell_NotifyIconA and Shell_NotifyIconW is the call to SendMessageA/W. */ -static BOOL SHELL_NotifyIcon(DWORD dwMessage, void* pnid, HWND nid_hwnd, DWORD nid_size, BOOL unicode) -{ - HWND hwnd; - COPYDATASTRUCT data; - - BOOL ret = FALSE; - int len = FIELD_OFFSET(TrayNotifyCDS_Dummy, nicon_data) + nid_size; - - TrayNotifyCDS_Dummy* pnotify_data = (TrayNotifyCDS_Dummy*) alloca(len); - - pnotify_data->cookie = 1; - pnotify_data->notify_code = dwMessage; - memcpy(&pnotify_data->nicon_data, pnid, nid_size); - - data.dwData = 1; - data.cbData = len; - data.lpData = pnotify_data; - - for(hwnd = 0; (hwnd = FindWindowExW(0, hwnd, L"Shell_TrayWnd", NULL)); ) - if ((unicode ? SendMessageW : SendMessageA)(hwnd, WM_COPYDATA, (WPARAM)nid_hwnd, (LPARAM)&data)) - ret = TRUE; - - return ret; -} - - /************************************************************************* - * Shell_NotifyIcon [SHELL32.296] + * Shell_NotifyIcon [SHELL32.296] * Shell_NotifyIconA [SHELL32.297] */ BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA pnid) { NOTIFYICONDATAW nidW; - DWORD cbSize; - - /* Validate the cbSize as Windows XP does */ - if (pnid->cbSize != NOTIFYICONDATAA_V1_SIZE && - pnid->cbSize != NOTIFYICONDATAA_V2_SIZE && - pnid->cbSize != sizeof(NOTIFYICONDATAA)) - { - WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n", - pnid->cbSize, NOTIFYICONDATAA_V1_SIZE); - cbSize = NOTIFYICONDATAA_V1_SIZE; - } - else - cbSize = pnid->cbSize; + DWORD cbSize, dwValidFlags; + /* Initialize and capture the basic data fields */ ZeroMemory(&nidW, sizeof(nidW)); - nidW.cbSize = sizeof(nidW); + nidW.cbSize = sizeof(nidW); // Use a default size for the moment nidW.hWnd = pnid->hWnd; nidW.uID = pnid->uID; nidW.uFlags = pnid->uFlags; nidW.uCallbackMessage = pnid->uCallbackMessage; nidW.hIcon = pnid->hIcon; - /* szTip */ - if (pnid->uFlags & NIF_TIP) - MultiByteToWideChar(CP_ACP, 0, pnid->szTip, -1, nidW.szTip, _countof(nidW.szTip)); + /* Validate the structure size and the flags */ + cbSize = pnid->cbSize; + dwValidFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; + if (cbSize == sizeof(NOTIFYICONDATAA)) + { + nidW.cbSize = sizeof(nidW); + dwValidFlags |= NIF_STATE | NIF_INFO | NIF_GUID /* | NIF_REALTIME | NIF_SHOWTIP */; + } + else if (cbSize == NOTIFYICONDATAA_V3_SIZE) + { + nidW.cbSize = NOTIFYICONDATAW_V3_SIZE; + dwValidFlags |= NIF_STATE | NIF_INFO | NIF_GUID; + } + else if (cbSize == NOTIFYICONDATAA_V2_SIZE) + { + nidW.cbSize = NOTIFYICONDATAW_V2_SIZE; + dwValidFlags |= NIF_STATE | NIF_INFO; + } + else // if cbSize == NOTIFYICONDATAA_V1_SIZE or something else + { + if (cbSize != NOTIFYICONDATAA_V1_SIZE) + { + WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n", + cbSize, NOTIFYICONDATAA_V1_SIZE); + cbSize = NOTIFYICONDATAA_V1_SIZE; + } + nidW.cbSize = NOTIFYICONDATAW_V1_SIZE; + } + nidW.uFlags &= dwValidFlags; + + /* Capture the other data fields */ + + if (nidW.uFlags & NIF_TIP) + { + /* + * Depending on the size of the NOTIFYICONDATA structure + * we should convert part of, or all the szTip string. + */ + if (cbSize <= NOTIFYICONDATAA_V1_SIZE) + { +#define NIDV1_TIP_SIZE_A (NOTIFYICONDATAA_V1_SIZE - FIELD_OFFSET(NOTIFYICONDATAA, szTip))/sizeof(CHAR) + MultiByteToWideChar(CP_ACP, 0, pnid->szTip, NIDV1_TIP_SIZE_A, + nidW.szTip, _countof(nidW.szTip)); + /* Truncate the string */ + nidW.szTip[NIDV1_TIP_SIZE_A - 1] = 0; +#undef NIDV1_TIP_SIZE_A + } + else + { + MultiByteToWideChar(CP_ACP, 0, pnid->szTip, -1, + nidW.szTip, _countof(nidW.szTip)); + } + } if (cbSize >= NOTIFYICONDATAA_V2_SIZE) { - nidW.dwState = pnid->dwState; - nidW.dwStateMask = pnid->dwStateMask; - - /* szInfo, szInfoTitle */ - if (pnid->uFlags & NIF_INFO) - { - MultiByteToWideChar(CP_ACP, 0, pnid->szInfo, -1, nidW.szInfo, _countof(nidW.szInfo)); - MultiByteToWideChar(CP_ACP, 0, pnid->szInfoTitle, -1, nidW.szInfoTitle, _countof(nidW.szInfoTitle)); - } - - nidW.uTimeout = pnid->uTimeout; + nidW.dwState = pnid->dwState; + nidW.dwStateMask = pnid->dwStateMask; + nidW.uTimeout = pnid->uTimeout; nidW.dwInfoFlags = pnid->dwInfoFlags; + + if (nidW.uFlags & NIF_INFO) + { + MultiByteToWideChar(CP_ACP, 0, pnid->szInfo, -1, + nidW.szInfo, _countof(nidW.szInfo)); + MultiByteToWideChar(CP_ACP, 0, pnid->szInfoTitle, -1, + nidW.szInfoTitle, _countof(nidW.szInfoTitle)); + } } + if ((cbSize >= NOTIFYICONDATAA_V3_SIZE) && (nidW.uFlags & NIF_GUID)) + nidW.guidItem = pnid->guidItem; + if (cbSize >= sizeof(NOTIFYICONDATAA)) nidW.hBalloonIcon = pnid->hBalloonIcon; + + /* Call the unicode function */ return Shell_NotifyIconW(dwMessage, &nidW); } @@ -116,19 +127,81 @@ BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA pnid) */ BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW pnid) { - DWORD cbSize; + BOOL ret = FALSE; + HWND hShellTrayWnd; + DWORD cbSize, dwValidFlags; + TRAYNOTIFYDATAW tnid; + COPYDATASTRUCT data; - /* Validate the cbSize so that WM_COPYDATA doesn't crash the application */ - if (pnid->cbSize != NOTIFYICONDATAW_V1_SIZE && - pnid->cbSize != NOTIFYICONDATAW_V2_SIZE && - pnid->cbSize != sizeof(NOTIFYICONDATAW)) + /* Find a handle to the shell tray window */ + hShellTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL); + if (!hShellTrayWnd) + return FALSE; // None found, bail out + + /* Validate the structure size and the flags */ + cbSize = pnid->cbSize; + dwValidFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; + if (cbSize == sizeof(NOTIFYICONDATAW)) { - WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n", - pnid->cbSize, NOTIFYICONDATAW_V1_SIZE); - cbSize = NOTIFYICONDATAW_V1_SIZE; + dwValidFlags |= NIF_STATE | NIF_INFO | NIF_GUID /* | NIF_REALTIME | NIF_SHOWTIP */; + } + else if (cbSize == NOTIFYICONDATAW_V3_SIZE) + { + dwValidFlags |= NIF_STATE | NIF_INFO | NIF_GUID; + } + else if (cbSize == NOTIFYICONDATAW_V2_SIZE) + { + dwValidFlags |= NIF_STATE | NIF_INFO; + } + else // if cbSize == NOTIFYICONDATAW_V1_SIZE or something else + { + if (cbSize != NOTIFYICONDATAW_V1_SIZE) + { + WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n", + cbSize, NOTIFYICONDATAW_V1_SIZE); + cbSize = NOTIFYICONDATAW_V1_SIZE; + } } - else - cbSize = pnid->cbSize; - return SHELL_NotifyIcon(dwMessage, pnid, pnid->hWnd, cbSize, TRUE); + /* Build the data structure */ + ZeroMemory(&tnid, sizeof(tnid)); + tnid.dwSignature = NI_NOTIFY_SIG; + tnid.dwMessage = dwMessage; + + /* Copy only the needed data, everything else is zeroed out */ + CopyMemory(&tnid.nid, pnid, cbSize); + /* Adjust the size (the NOTIFYICONDATA structure is the full-fledged one) and the flags */ + tnid.nid.cbSize = sizeof(tnid.nid); + tnid.nid.uFlags &= dwValidFlags; + + /* Be sure the szTip member (that could be cut-off) is correctly NULL-terminated */ + if (tnid.nid.uFlags & NIF_TIP) + { + if (cbSize <= NOTIFYICONDATAW_V1_SIZE) + { +#define NIDV1_TIP_SIZE_W (NOTIFYICONDATAW_V1_SIZE - FIELD_OFFSET(NOTIFYICONDATAW, szTip))/sizeof(WCHAR) + tnid.nid.szTip[NIDV1_TIP_SIZE_W - 1] = 0; +#undef NIDV1_TIP_SIZE_W + } + else + { + tnid.nid.szTip[_countof(tnid.nid.szTip) - 1] = 0; + } + } + + /* Be sure the info strings are correctly NULL-terminated */ + if (tnid.nid.uFlags & NIF_INFO) + { + tnid.nid.szInfo[_countof(tnid.nid.szInfo) - 1] = 0; + tnid.nid.szInfoTitle[_countof(tnid.nid.szInfoTitle) - 1] = 0; + } + + /* Send the data */ + data.dwData = 1; + data.cbData = sizeof(tnid); + data.lpData = &tnid; + if (SendMessageW(hShellTrayWnd, WM_COPYDATA, (WPARAM)pnid->hWnd, (LPARAM)&data)) + ret = TRUE; + + return ret; } diff --git a/sdk/include/reactos/undocshell.h b/sdk/include/reactos/undocshell.h index 4a68feb63ec..e74f201f860 100644 --- a/sdk/include/reactos/undocshell.h +++ b/sdk/include/reactos/undocshell.h @@ -30,10 +30,29 @@ extern "C" { #define DBIMF_NOMARGINS 0x2000 #endif // NTDDI_LONGHORN +#if defined (_SHELLAPI_H) || defined (_INC_SHELLAPI) + +/**************************************************************************** + * Taskbar interface WM_COPYDATA structures + * See http://www.geoffchappell.com/studies/windows/shell/shell32/api/shlnot/copydata.htm + */ +/* Data structure for Shell_NotifyIcon messages */ +typedef struct _TRAYNOTIFYDATAW +{ + DWORD dwSignature; + DWORD dwMessage; + NOTIFYICONDATAW nid; // Always use the latest NOTIFYICONDATAW structure version. +} TRAYNOTIFYDATAW, *PTRAYNOTIFYDATAW; +// Note: One could also introduce TRAYNOTIFYDATAA + +#define NI_NOTIFY_SIG 0x34753423 /* TRAYNOTIFYDATA */ + +#endif /* defined (_SHELLAPI_H) || defined (_INC_SHELLAPI) */ + + /**************************************************************************** * Taskbar WM_COMMAND identifiers */ - #define TWM_DOEXITWINDOWS (WM_USER + 342) #define TWM_CYCLEFOCUS (WM_USER + 348) @@ -79,8 +98,8 @@ BOOL WINAPI StrRetToStrNW(LPWSTR,DWORD,LPSTRRET,const ITEMIDLIST*); /**************************************************************************** -* SHChangeNotifyRegister API -*/ + * SHChangeNotifyRegister API + */ #define SHCNRF_InterruptLevel 0x0001 #define SHCNRF_ShellLevel 0x0002 #define SHCNRF_RecursiveInterrupt 0x1000 /* Must be combined with SHCNRF_InterruptLevel */ @@ -580,7 +599,7 @@ BOOL WINAPI GUIDFromStringW( _In_ PCWSTR psz, _Out_ LPGUID pguid ); - + static inline ULONG Win32DbgPrint(const char *filename, int line, const char *lpFormat, ...) { @@ -838,7 +857,7 @@ typedef struct tagSHELL_LINK_INFOW /***************************************************************************** * SHELL_LINK_INFO_VOLUME_IDA/W - * If cbVolumeLabelOffset != 0x00000014 (should be 0x00000010) then use + * If cbVolumeLabelOffset != 0x00000014 (should be 0x00000010) then use * SHELL_LINK_INFO_VOLUME_IDA * If cbVolumeLabelOffset == 0x00000014 then use SHELL_LINK_INFO_VOLUME_IDW */ @@ -958,7 +977,7 @@ typedef struct tagEXP_VISTA_ID_LIST { /* .cbSize >= 0x0000000a, .dwSignature = 0xa000000c */ DATABLOCK_HEADER dbh; - /* Specifies an alternate IDList that can be used instead + /* Specifies an alternate IDList that can be used instead of the "normal" IDList (SLDF_HAS_ID_LIST) */ /* LPITEMIDLIST pIDList; (variable) */ } EXP_VISTA_ID_LIST, *LPEXP_VISTA_ID_LIST;