Author: gedmurphy Date: Thu Oct 15 21:29:11 2015 New Revision: 69548
URL: http://svn.reactos.org/svn/reactos?rev=69548&view=rev Log: [DEVMGR] - Move all public interface functions to api.cpp - Implement DeviceManager_ExecuteA
Modified: trunk/reactos/dll/win32/devmgr/api.cpp trunk/reactos/dll/win32/devmgr/properties/advprop.cpp trunk/reactos/dll/win32/devmgr/properties/misc.cpp trunk/reactos/dll/win32/devmgr/properties/properties.h
Modified: trunk/reactos/dll/win32/devmgr/api.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/api.cpp?re... ============================================================================== --- trunk/reactos/dll/win32/devmgr/api.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/devmgr/api.cpp [iso-8859-1] Thu Oct 15 21:29:11 2015 @@ -3,7 +3,7 @@ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS devmgr.dll * FILE: dll/win32/devmgr/api.cpp -* PURPOSE: devmgr.dll stubs +* PURPOSE: devmgr.dll interface * PROGRAMMER: Thomas Weidenmueller (w3seek@users.sourceforge.net) * Ged Murphy (gedmurphy@reactos.org) * NOTES: @@ -19,10 +19,506 @@ #include "precomp.h" #include <devmgr/devmgr.h> #include "devmgmt/MainWindow.h" +#include "properties/properties.h"
HINSTANCE hDllInstance = NULL;
-WINE_DEFAULT_DEBUG_CHANNEL(devmgr); + + +/*************************************************************************** +* NAME EXPORTED +* DeviceAdvancedPropertiesW +* +* DESCRIPTION +* Invokes the device properties dialog, this version may add some property pages +* for some devices +* +* ARGUMENTS +* hWndParent: Handle to the parent window +* lpMachineName: Machine Name, NULL is the local machine +* lpDeviceID: Specifies the device whose properties are to be shown +* +* RETURN VALUE +* Always returns -1, a call to GetLastError returns 0 if successful +* +* @implemented +*/ +INT_PTR +WINAPI +DeviceAdvancedPropertiesW(IN HWND hWndParent OPTIONAL, + IN LPCWSTR lpMachineName OPTIONAL, + IN LPCWSTR lpDeviceID) +{ + HDEVINFO hDevInfo; + SP_DEVINFO_DATA DevInfoData; + HINSTANCE hComCtl32; + INT_PTR Ret = -1; + + if (lpDeviceID == NULL) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + /* dynamically load comctl32 */ + hComCtl32 = LoadAndInitComctl32(); + if (hComCtl32 != NULL) + { + hDevInfo = SetupDiCreateDeviceInfoListEx(NULL, + hWndParent, + lpMachineName, + NULL); + if (hDevInfo != INVALID_HANDLE_VALUE) + { + DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); + if (SetupDiOpenDeviceInfo(hDevInfo, + lpDeviceID, + hWndParent, + 0, + &DevInfoData)) + { + Ret = DisplayDeviceAdvancedProperties(hWndParent, + lpDeviceID, + hDevInfo, + &DevInfoData, + hComCtl32, + lpMachineName, + 0); + } + + SetupDiDestroyDeviceInfoList(hDevInfo); + } + + FreeLibrary(hComCtl32); + } + + return Ret; +} + + +/*************************************************************************** +* NAME EXPORTED +* DeviceAdvancedPropertiesA +* +* DESCRIPTION +* Invokes the device properties dialog, this version may add some property pages +* for some devices +* +* ARGUMENTS +* hWndParent: Handle to the parent window +* lpMachineName: Machine Name, NULL is the local machine +* lpDeviceID: Specifies the device whose properties are to be shown +* +* RETURN VALUE +* Always returns -1, a call to GetLastError returns 0 if successful +* +* @implemented +*/ +INT_PTR +WINAPI +DeviceAdvancedPropertiesA(IN HWND hWndParent OPTIONAL, + IN LPCSTR lpMachineName OPTIONAL, + IN LPCSTR lpDeviceID) +{ + LPWSTR lpMachineNameW = NULL; + LPWSTR lpDeviceIDW = NULL; + INT_PTR Ret = -1; + + if (lpMachineName != NULL) + { + if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName, + CP_ACP))) + { + goto Cleanup; + } + } + if (lpDeviceID != NULL) + { + if (!(lpDeviceIDW = ConvertMultiByteToUnicode(lpDeviceID, + CP_ACP))) + { + goto Cleanup; + } + } + + Ret = DeviceAdvancedPropertiesW(hWndParent, + lpMachineNameW, + lpDeviceIDW); + +Cleanup: + if (lpMachineNameW != NULL) + { + HeapFree(GetProcessHeap(), + 0, + lpMachineNameW); + } + if (lpDeviceIDW != NULL) + { + HeapFree(GetProcessHeap(), + 0, + lpDeviceIDW); + } + + return Ret; +} + + +/*************************************************************************** +* NAME EXPORTED +* DevicePropertiesExA +* +* DESCRIPTION +* Invokes the extended device properties dialog +* +* ARGUMENTS +* hWndParent: Handle to the parent window +* lpMachineName: Machine Name, NULL is the local machine +* lpDeviceID: Specifies the device whose properties are to be shown, optional if +* bShowDevMgr is nonzero +* dwFlags: This parameter can be a combination of the following flags: +* * DPF_DEVICE_STATUS_ACTION: Only valid if bShowDevMgr, causes +* the default device status action button +* to be clicked (Troubleshoot, Enable +* Device, etc) +* bShowDevMgr: If non-zero it displays the device manager instead of +* the advanced device property dialog +* +* RETURN VALUE +* 1: if bShowDevMgr is non-zero and no error occured +* -1: a call to GetLastError returns 0 if successful +* +* @implemented +*/ +INT_PTR +WINAPI +DevicePropertiesExA(IN HWND hWndParent OPTIONAL, + IN LPCSTR lpMachineName OPTIONAL, + IN LPCSTR lpDeviceID OPTIONAL, + IN DWORD dwFlags OPTIONAL, + IN BOOL bShowDevMgr) +{ + LPWSTR lpMachineNameW = NULL; + LPWSTR lpDeviceIDW = NULL; + INT_PTR Ret = -1; + + if (lpMachineName != NULL) + { + if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName, + CP_ACP))) + { + goto Cleanup; + } + } + if (lpDeviceID != NULL) + { + if (!(lpDeviceIDW = ConvertMultiByteToUnicode(lpDeviceID, + CP_ACP))) + { + goto Cleanup; + } + } + + Ret = DevicePropertiesExW(hWndParent, + lpMachineNameW, + lpDeviceIDW, + dwFlags, + bShowDevMgr); + +Cleanup: + if (lpMachineNameW != NULL) + { + HeapFree(GetProcessHeap(), + 0, + lpMachineNameW); + } + if (lpDeviceIDW != NULL) + { + HeapFree(GetProcessHeap(), + 0, + lpDeviceIDW); + } + + return Ret; +} + + +/*************************************************************************** +* NAME EXPORTED +* DevicePropertiesExW +* +* DESCRIPTION +* Invokes the extended device properties dialog +* +* ARGUMENTS +* hWndParent: Handle to the parent window +* lpMachineName: Machine Name, NULL is the local machine +* lpDeviceID: Specifies the device whose properties are to be shown, optional if +* bShowDevMgr is nonzero +* dwFlags: This parameter can be a combination of the following flags: +* * DPF_DEVICE_STATUS_ACTION: Only valid if bShowDevMgr, causes +* the default device status action button +* to be clicked (Troubleshoot, Enable +* Device, etc) +* bShowDevMgr: If non-zero it displays the device manager instead of +* the advanced device property dialog +* +* RETURN VALUE +* 1: if bShowDevMgr is non-zero and no error occured +* -1: a call to GetLastError returns 0 if successful +* +* @implemented +*/ +INT_PTR +WINAPI +DevicePropertiesExW(IN HWND hWndParent OPTIONAL, + IN LPCWSTR lpMachineName OPTIONAL, + IN LPCWSTR lpDeviceID OPTIONAL, + IN DWORD dwFlags OPTIONAL, + IN BOOL bShowDevMgr) +{ + INT_PTR Ret = -1; + + if (dwFlags & ~(DPF_EXTENDED | DPF_DEVICE_STATUS_ACTION)) + { + FIXME("DevPropertiesExW: Invalid flags: 0x%x\n", + dwFlags & ~(DPF_EXTENDED | DPF_DEVICE_STATUS_ACTION)); + SetLastError(ERROR_INVALID_FLAGS); + return -1; + } + + if (bShowDevMgr) + { + FIXME("DevPropertiesExW doesn't support bShowDevMgr!\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + } + else + { + HDEVINFO hDevInfo; + SP_DEVINFO_DATA DevInfoData; + HINSTANCE hComCtl32; + + if (lpDeviceID == NULL) + { + SetLastError(ERROR_INVALID_PARAMETER); + return -1; + } + + /* dynamically load comctl32 */ + hComCtl32 = LoadAndInitComctl32(); + if (hComCtl32 != NULL) + { + hDevInfo = SetupDiCreateDeviceInfoListEx(NULL, + hWndParent, + lpMachineName, + NULL); + if (hDevInfo != INVALID_HANDLE_VALUE) + { + DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); + if (SetupDiOpenDeviceInfo(hDevInfo, + lpDeviceID, + hWndParent, + 0, + &DevInfoData)) + { + Ret = DisplayDeviceAdvancedProperties(hWndParent, + lpDeviceID, + hDevInfo, + &DevInfoData, + hComCtl32, + lpMachineName, + dwFlags); + } + + SetupDiDestroyDeviceInfoList(hDevInfo); + } + + FreeLibrary(hComCtl32); + } + } + + return Ret; +} + + +/*************************************************************************** +* NAME EXPORTED +* DevicePropertiesA +* +* DESCRIPTION +* Invokes the device properties dialog directly +* +* ARGUMENTS +* hWndParent: Handle to the parent window +* lpMachineName: Machine Name, NULL is the local machine +* lpDeviceID: Specifies the device whose properties are to be shown +* bShowDevMgr: If non-zero it displays the device manager instead of +* the device property dialog +* +* RETURN VALUE +* >=0: if no errors occured +* -1: if errors occured +* +* REVISIONS +* +* @implemented +*/ +int +WINAPI +DevicePropertiesA(HWND hWndParent, + LPCSTR lpMachineName, + LPCSTR lpDeviceID, + BOOL bShowDevMgr) +{ + return DevicePropertiesExA(hWndParent, + lpMachineName, + lpDeviceID, + DPF_EXTENDED, + bShowDevMgr); +} + + +/*************************************************************************** +* NAME EXPORTED +* DevicePropertiesW +* +* DESCRIPTION +* Invokes the device properties dialog directly +* +* ARGUMENTS +* hWndParent: Handle to the parent window +* lpMachineName: Machine Name, NULL is the local machine +* lpDeviceID: Specifies the device whose properties are to be shown +* bShowDevMgr: If non-zero it displays the device manager instead of +* the device property dialog +* +* RETURN VALUE +* >=0: if no errors occured +* -1: if errors occured +* +* REVISIONS +* +* @implemented +*/ +int +WINAPI +DevicePropertiesW(HWND hWndParent, + LPCWSTR lpMachineName, + LPCWSTR lpDeviceID, + BOOL bShowDevMgr) +{ + return DevicePropertiesExW(hWndParent, + lpMachineName, + lpDeviceID, + DPF_EXTENDED, + bShowDevMgr); +} + + +/*************************************************************************** +* NAME EXPORTED +* DeviceProperties_RunDLLA +* +* DESCRIPTION +* Invokes the device properties dialog +* +* ARGUMENTS +* hWndParent: Handle to the parent window +* hInst: Handle to the application instance +* lpDeviceCmd: A command that includes the DeviceID of the properties to be shown, +* also see NOTEs +* nCmdShow: Specifies how the window should be shown +* +* RETURN VALUE +* +* REVISIONS +* +* NOTE +* - lpDeviceCmd is a string in the form of "/MachineName MACHINE /DeviceID DEVICEPATH" +* (/MachineName is optional). This function only parses this string and eventually +* calls DeviceProperties(). +* +* @implemented +*/ +VOID +WINAPI +DeviceProperties_RunDLLA(HWND hWndParent, + HINSTANCE hInst, + LPCSTR lpDeviceCmd, + int nCmdShow) +{ + LPWSTR lpDeviceCmdW = NULL; + + if (lpDeviceCmd != NULL) + { + if ((lpDeviceCmdW = ConvertMultiByteToUnicode(lpDeviceCmd, + CP_ACP))) + { + DeviceProperties_RunDLLW(hWndParent, + hInst, + lpDeviceCmdW, + nCmdShow); + } + } + + if (lpDeviceCmdW != NULL) + { + HeapFree(GetProcessHeap(), + 0, + lpDeviceCmdW); + } +} + + +/*************************************************************************** +* NAME EXPORTED +* DeviceProperties_RunDLLW +* +* DESCRIPTION +* Invokes the device properties dialog +* +* ARGUMENTS +* hWndParent: Handle to the parent window +* hInst: Handle to the application instance +* lpDeviceCmd: A command that includes the DeviceID of the properties to be shown, +* also see NOTEs +* nCmdShow: Specifies how the window should be shown +* +* RETURN VALUE +* +* REVISIONS +* +* NOTE +* - lpDeviceCmd is a string in the form of "/MachineName MACHINE /DeviceID DEVICEPATH" +* (/MachineName is optional). This function only parses this string and eventually +* calls DeviceProperties(). +* +* @implemented +*/ +VOID +WINAPI +DeviceProperties_RunDLLW(HWND hWndParent, + HINSTANCE hInst, + LPCWSTR lpDeviceCmd, + int nCmdShow) +{ + WCHAR szDeviceID[MAX_DEVICE_ID_LEN + 1]; + WCHAR szMachineName[MAX_COMPUTERNAME_LENGTH + 1]; + LPWSTR lpString = (LPWSTR)lpDeviceCmd; + + if (!GetDeviceAndComputerName(lpString, + szDeviceID, + szMachineName)) + { + ERR("DeviceProperties_RunDLLW DeviceID: %S, MachineName: %S\n", szDeviceID, szMachineName); + return; + } + + DevicePropertiesW(hWndParent, + szMachineName, + szDeviceID, + FALSE); +} +
/*************************************************************************** @@ -48,7 +544,7 @@ * - Win runs the device manager in a separate process, so hWndParent is somehow * obsolete. * -* @unimplemented +* @implemented */ BOOL WINAPI @@ -57,8 +553,32 @@ LPCSTR lpMachineName, int nCmdShow) { - UNIMPLEMENTED; - return FALSE; + LPWSTR lpMachineNameW = NULL; + BOOL Ret; + + if (lpMachineName != NULL) + { + if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName, + CP_ACP))) + { + return FALSE; + } + } + + Ret = DeviceManager_ExecuteW(hWndParent, + hInst, + lpMachineNameW, + nCmdShow); + + if (lpMachineNameW != NULL) + { + HeapFree(GetProcessHeap(), + 0, + lpMachineNameW); + } + + + return Ret; }
@@ -85,7 +605,7 @@ * - Win runs the device manager in a separate process, so hWndParent is somehow * obsolete. * -* @unimplemented +* @implemented */ BOOL WINAPI
Modified: trunk/reactos/dll/win32/devmgr/properties/advprop.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/properties... ============================================================================== --- trunk/reactos/dll/win32/devmgr/properties/advprop.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/devmgr/properties/advprop.cpp [iso-8859-1] Thu Oct 15 21:29:11 2015 @@ -2744,556 +2744,3 @@
return Ret; } - - -static BOOL -GetDeviceAndComputerName(LPWSTR lpString, - WCHAR szDeviceID[], - WCHAR szMachineName[]) -{ - BOOL ret = FALSE; - - szDeviceID[0] = L'\0'; - szMachineName[0] = L'\0'; - - while (*lpString != L'\0') - { - if (*lpString == L'/') - { - lpString++; - if(!_wcsnicmp(lpString, L"DeviceID", 8)) - { - lpString += 9; - if (*lpString != L'\0') - { - int i = 0; - while ((*lpString != L' ') && - (*lpString != L'\0') && - (i <= MAX_DEVICE_ID_LEN)) - { - szDeviceID[i++] = *lpString++; - } - szDeviceID[i] = L'\0'; - ret = TRUE; - } - } - else if (!_wcsnicmp(lpString, L"MachineName", 11)) - { - lpString += 12; - if (*lpString != L'\0') - { - int i = 0; - while ((*lpString != L' ') && - (*lpString != L'\0') && - (i <= MAX_COMPUTERNAME_LENGTH)) - { - szMachineName[i++] = *lpString++; - } - szMachineName[i] = L'\0'; - } - } - /* knock the pointer back one and let the next - * pointer deal with incrementing, otherwise we - * go past the end of the string */ - lpString--; - } - lpString++; - } - - return ret; -} - - -/*************************************************************************** - * NAME EXPORTED - * DeviceAdvancedPropertiesW - * - * DESCRIPTION - * Invokes the device properties dialog, this version may add some property pages - * for some devices - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * lpMachineName: Machine Name, NULL is the local machine - * lpDeviceID: Specifies the device whose properties are to be shown - * - * RETURN VALUE - * Always returns -1, a call to GetLastError returns 0 if successful - * - * @implemented - */ -INT_PTR -WINAPI -DeviceAdvancedPropertiesW(IN HWND hWndParent OPTIONAL, - IN LPCWSTR lpMachineName OPTIONAL, - IN LPCWSTR lpDeviceID) -{ - HDEVINFO hDevInfo; - SP_DEVINFO_DATA DevInfoData; - HINSTANCE hComCtl32; - INT_PTR Ret = -1; - - if (lpDeviceID == NULL) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - - /* dynamically load comctl32 */ - hComCtl32 = LoadAndInitComctl32(); - if (hComCtl32 != NULL) - { - hDevInfo = SetupDiCreateDeviceInfoListEx(NULL, - hWndParent, - lpMachineName, - NULL); - if (hDevInfo != INVALID_HANDLE_VALUE) - { - DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); - if (SetupDiOpenDeviceInfo(hDevInfo, - lpDeviceID, - hWndParent, - 0, - &DevInfoData)) - { - Ret = DisplayDeviceAdvancedProperties(hWndParent, - lpDeviceID, - hDevInfo, - &DevInfoData, - hComCtl32, - lpMachineName, - 0); - } - - SetupDiDestroyDeviceInfoList(hDevInfo); - } - - FreeLibrary(hComCtl32); - } - - return Ret; -} - - -/*************************************************************************** - * NAME EXPORTED - * DeviceAdvancedPropertiesA - * - * DESCRIPTION - * Invokes the device properties dialog, this version may add some property pages - * for some devices - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * lpMachineName: Machine Name, NULL is the local machine - * lpDeviceID: Specifies the device whose properties are to be shown - * - * RETURN VALUE - * Always returns -1, a call to GetLastError returns 0 if successful - * - * @implemented - */ -INT_PTR -WINAPI -DeviceAdvancedPropertiesA(IN HWND hWndParent OPTIONAL, - IN LPCSTR lpMachineName OPTIONAL, - IN LPCSTR lpDeviceID) -{ - LPWSTR lpMachineNameW = NULL; - LPWSTR lpDeviceIDW = NULL; - INT_PTR Ret = -1; - - if (lpMachineName != NULL) - { - if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName, - CP_ACP))) - { - goto Cleanup; - } - } - if (lpDeviceID != NULL) - { - if (!(lpDeviceIDW = ConvertMultiByteToUnicode(lpDeviceID, - CP_ACP))) - { - goto Cleanup; - } - } - - Ret = DeviceAdvancedPropertiesW(hWndParent, - lpMachineNameW, - lpDeviceIDW); - -Cleanup: - if (lpMachineNameW != NULL) - { - HeapFree(GetProcessHeap(), - 0, - lpMachineNameW); - } - if (lpDeviceIDW != NULL) - { - HeapFree(GetProcessHeap(), - 0, - lpDeviceIDW); - } - - return Ret; -} - - -/*************************************************************************** - * NAME EXPORTED - * DevicePropertiesExA - * - * DESCRIPTION - * Invokes the extended device properties dialog - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * lpMachineName: Machine Name, NULL is the local machine - * lpDeviceID: Specifies the device whose properties are to be shown, optional if - * bShowDevMgr is nonzero - * dwFlags: This parameter can be a combination of the following flags: - * * DPF_DEVICE_STATUS_ACTION: Only valid if bShowDevMgr, causes - * the default device status action button - * to be clicked (Troubleshoot, Enable - * Device, etc) - * bShowDevMgr: If non-zero it displays the device manager instead of - * the advanced device property dialog - * - * RETURN VALUE - * 1: if bShowDevMgr is non-zero and no error occured - * -1: a call to GetLastError returns 0 if successful - * - * @implemented - */ -INT_PTR -WINAPI -DevicePropertiesExA(IN HWND hWndParent OPTIONAL, - IN LPCSTR lpMachineName OPTIONAL, - IN LPCSTR lpDeviceID OPTIONAL, - IN DWORD dwFlags OPTIONAL, - IN BOOL bShowDevMgr) -{ - LPWSTR lpMachineNameW = NULL; - LPWSTR lpDeviceIDW = NULL; - INT_PTR Ret = -1; - - if (lpMachineName != NULL) - { - if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName, - CP_ACP))) - { - goto Cleanup; - } - } - if (lpDeviceID != NULL) - { - if (!(lpDeviceIDW = ConvertMultiByteToUnicode(lpDeviceID, - CP_ACP))) - { - goto Cleanup; - } - } - - Ret = DevicePropertiesExW(hWndParent, - lpMachineNameW, - lpDeviceIDW, - dwFlags, - bShowDevMgr); - -Cleanup: - if (lpMachineNameW != NULL) - { - HeapFree(GetProcessHeap(), - 0, - lpMachineNameW); - } - if (lpDeviceIDW != NULL) - { - HeapFree(GetProcessHeap(), - 0, - lpDeviceIDW); - } - - return Ret; -} - - -/*************************************************************************** - * NAME EXPORTED - * DevicePropertiesExW - * - * DESCRIPTION - * Invokes the extended device properties dialog - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * lpMachineName: Machine Name, NULL is the local machine - * lpDeviceID: Specifies the device whose properties are to be shown, optional if - * bShowDevMgr is nonzero - * dwFlags: This parameter can be a combination of the following flags: - * * DPF_DEVICE_STATUS_ACTION: Only valid if bShowDevMgr, causes - * the default device status action button - * to be clicked (Troubleshoot, Enable - * Device, etc) - * bShowDevMgr: If non-zero it displays the device manager instead of - * the advanced device property dialog - * - * RETURN VALUE - * 1: if bShowDevMgr is non-zero and no error occured - * -1: a call to GetLastError returns 0 if successful - * - * @implemented - */ -INT_PTR -WINAPI -DevicePropertiesExW(IN HWND hWndParent OPTIONAL, - IN LPCWSTR lpMachineName OPTIONAL, - IN LPCWSTR lpDeviceID OPTIONAL, - IN DWORD dwFlags OPTIONAL, - IN BOOL bShowDevMgr) -{ - INT_PTR Ret = -1; - - if (dwFlags & ~(DPF_EXTENDED | DPF_DEVICE_STATUS_ACTION)) - { - FIXME("DevPropertiesExW: Invalid flags: 0x%x\n", - dwFlags & ~(DPF_EXTENDED | DPF_DEVICE_STATUS_ACTION)); - SetLastError(ERROR_INVALID_FLAGS); - return -1; - } - - if (bShowDevMgr) - { - FIXME("DevPropertiesExW doesn't support bShowDevMgr!\n"); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - } - else - { - HDEVINFO hDevInfo; - SP_DEVINFO_DATA DevInfoData; - HINSTANCE hComCtl32; - - if (lpDeviceID == NULL) - { - SetLastError(ERROR_INVALID_PARAMETER); - return -1; - } - - /* dynamically load comctl32 */ - hComCtl32 = LoadAndInitComctl32(); - if (hComCtl32 != NULL) - { - hDevInfo = SetupDiCreateDeviceInfoListEx(NULL, - hWndParent, - lpMachineName, - NULL); - if (hDevInfo != INVALID_HANDLE_VALUE) - { - DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); - if (SetupDiOpenDeviceInfo(hDevInfo, - lpDeviceID, - hWndParent, - 0, - &DevInfoData)) - { - Ret = DisplayDeviceAdvancedProperties(hWndParent, - lpDeviceID, - hDevInfo, - &DevInfoData, - hComCtl32, - lpMachineName, - dwFlags); - } - - SetupDiDestroyDeviceInfoList(hDevInfo); - } - - FreeLibrary(hComCtl32); - } - } - - return Ret; -} - - -/*************************************************************************** - * NAME EXPORTED - * DevicePropertiesA - * - * DESCRIPTION - * Invokes the device properties dialog directly - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * lpMachineName: Machine Name, NULL is the local machine - * lpDeviceID: Specifies the device whose properties are to be shown - * bShowDevMgr: If non-zero it displays the device manager instead of - * the device property dialog - * - * RETURN VALUE - * >=0: if no errors occured - * -1: if errors occured - * - * REVISIONS - * - * @implemented - */ -int -WINAPI -DevicePropertiesA(HWND hWndParent, - LPCSTR lpMachineName, - LPCSTR lpDeviceID, - BOOL bShowDevMgr) -{ - return DevicePropertiesExA(hWndParent, - lpMachineName, - lpDeviceID, - DPF_EXTENDED, - bShowDevMgr); -} - - -/*************************************************************************** - * NAME EXPORTED - * DevicePropertiesW - * - * DESCRIPTION - * Invokes the device properties dialog directly - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * lpMachineName: Machine Name, NULL is the local machine - * lpDeviceID: Specifies the device whose properties are to be shown - * bShowDevMgr: If non-zero it displays the device manager instead of - * the device property dialog - * - * RETURN VALUE - * >=0: if no errors occured - * -1: if errors occured - * - * REVISIONS - * - * @implemented - */ -int -WINAPI -DevicePropertiesW(HWND hWndParent, - LPCWSTR lpMachineName, - LPCWSTR lpDeviceID, - BOOL bShowDevMgr) -{ - return DevicePropertiesExW(hWndParent, - lpMachineName, - lpDeviceID, - DPF_EXTENDED, - bShowDevMgr); -} - - -/*************************************************************************** - * NAME EXPORTED - * DeviceProperties_RunDLLA - * - * DESCRIPTION - * Invokes the device properties dialog - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * hInst: Handle to the application instance - * lpDeviceCmd: A command that includes the DeviceID of the properties to be shown, - * also see NOTEs - * nCmdShow: Specifies how the window should be shown - * - * RETURN VALUE - * - * REVISIONS - * - * NOTE - * - lpDeviceCmd is a string in the form of "/MachineName MACHINE /DeviceID DEVICEPATH" - * (/MachineName is optional). This function only parses this string and eventually - * calls DeviceProperties(). - * - * @implemented - */ -VOID -WINAPI -DeviceProperties_RunDLLA(HWND hWndParent, - HINSTANCE hInst, - LPCSTR lpDeviceCmd, - int nCmdShow) -{ - LPWSTR lpDeviceCmdW = NULL; - - if (lpDeviceCmd != NULL) - { - if ((lpDeviceCmdW = ConvertMultiByteToUnicode(lpDeviceCmd, - CP_ACP))) - { - DeviceProperties_RunDLLW(hWndParent, - hInst, - lpDeviceCmdW, - nCmdShow); - } - } - - if (lpDeviceCmdW != NULL) - { - HeapFree(GetProcessHeap(), - 0, - lpDeviceCmdW); - } -} - - -/*************************************************************************** - * NAME EXPORTED - * DeviceProperties_RunDLLW - * - * DESCRIPTION - * Invokes the device properties dialog - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * hInst: Handle to the application instance - * lpDeviceCmd: A command that includes the DeviceID of the properties to be shown, - * also see NOTEs - * nCmdShow: Specifies how the window should be shown - * - * RETURN VALUE - * - * REVISIONS - * - * NOTE - * - lpDeviceCmd is a string in the form of "/MachineName MACHINE /DeviceID DEVICEPATH" - * (/MachineName is optional). This function only parses this string and eventually - * calls DeviceProperties(). - * - * @implemented - */ -VOID -WINAPI -DeviceProperties_RunDLLW(HWND hWndParent, - HINSTANCE hInst, - LPCWSTR lpDeviceCmd, - int nCmdShow) -{ - WCHAR szDeviceID[MAX_DEVICE_ID_LEN+1]; - WCHAR szMachineName[MAX_COMPUTERNAME_LENGTH+1]; - LPWSTR lpString = (LPWSTR)lpDeviceCmd; - - if (!GetDeviceAndComputerName(lpString, - szDeviceID, - szMachineName)) - { - ERR("DeviceProperties_RunDLLW DeviceID: %S, MachineName: %S\n", szDeviceID, szMachineName); - return; - } - - DevicePropertiesW(hWndParent, - szMachineName, - szDeviceID, - FALSE); -}
Modified: trunk/reactos/dll/win32/devmgr/properties/misc.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/properties... ============================================================================== --- trunk/reactos/dll/win32/devmgr/properties/misc.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/devmgr/properties/misc.cpp [iso-8859-1] Thu Oct 15 21:29:11 2015 @@ -1129,3 +1129,61 @@
return hComCtl32; } + + +BOOL +GetDeviceAndComputerName(LPWSTR lpString, + WCHAR szDeviceID[], + WCHAR szMachineName[]) +{ + BOOL ret = FALSE; + + szDeviceID[0] = L'\0'; + szMachineName[0] = L'\0'; + + while (*lpString != L'\0') + { + if (*lpString == L'/') + { + lpString++; + if (!_wcsnicmp(lpString, L"DeviceID", 8)) + { + lpString += 9; + if (*lpString != L'\0') + { + int i = 0; + while ((*lpString != L' ') && + (*lpString != L'\0') && + (i <= MAX_DEVICE_ID_LEN)) + { + szDeviceID[i++] = *lpString++; + } + szDeviceID[i] = L'\0'; + ret = TRUE; + } + } + else if (!_wcsnicmp(lpString, L"MachineName", 11)) + { + lpString += 12; + if (*lpString != L'\0') + { + int i = 0; + while ((*lpString != L' ') && + (*lpString != L'\0') && + (i <= MAX_COMPUTERNAME_LENGTH)) + { + szMachineName[i++] = *lpString++; + } + szMachineName[i] = L'\0'; + } + } + /* knock the pointer back one and let the next + * pointer deal with incrementing, otherwise we + * go past the end of the string */ + lpString--; + } + lpString++; + } + + return ret; +}
Modified: trunk/reactos/dll/win32/devmgr/properties/properties.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/properties... ============================================================================== --- trunk/reactos/dll/win32/devmgr/properties/properties.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/devmgr/properties/properties.h [iso-8859-1] Thu Oct 15 21:29:11 2015 @@ -129,6 +129,11 @@ LoadAndInitComctl32(VOID);
BOOL +GetDeviceAndComputerName(LPWSTR lpString, + WCHAR szDeviceID[], + WCHAR szMachineName[]); + +BOOL GetDeviceManufacturerString(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, OUT LPWSTR szBuffer,