+++ /dev/null
-/*
-*
-* COPYRIGHT: See COPYING in the top level directory
-* PROJECT: ReactOS devmgr.dll
-* FILE: dll/win32/devmgr/api.cpp
-* PURPOSE: devmgr.dll interface
-* PROGRAMMER: Thomas Weidenmueller (w3seek@users.sourceforge.net)
-* Ged Murphy (gedmurphy@reactos.org)
-* NOTES:
-* Some helpful resources:
-* http://support.microsoft.com/default.aspx?scid=kb;%5BLN%5D;815320
-* http://www.jsiinc.com/SUBO/tip7400/rh7482.htm
-* http://www.jsiinc.com/SUBM/tip6400/rh6490.htm
-*
-* UPDATE HISTORY:
-* 04-04-2004 Created
-*/
-
-#include "precomp.h"
-#include "devmgmt/MainWindow.h"
-#include "properties/properties.h"
-
-HINSTANCE hDllInstance = NULL;
-
-
-
-/***************************************************************************
-* 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);
-}
-
-
-
-/***************************************************************************
-* NAME EXPORTED
-* DeviceManager_ExecuteA
-*
-* DESCRIPTION
-* Starts the Device Manager
-*
-* ARGUMENTS
-* hWndParent: Handle to the parent window
-* hInst: Handle to the application instance
-* lpMachineName: Machine Name, NULL is the local machine
-* nCmdShow: Specifies how the window should be shown
-*
-* RETURN VALUE
-* TRUE: if no errors occured
-* FALSE: if the device manager could not be executed
-*
-* REVISIONS
-*
-* NOTE
-* - Win runs the device manager in a separate process, so hWndParent is somehow
-* obsolete.
-*
-* @implemented
-*/
-BOOL
-WINAPI
-DeviceManager_ExecuteA(HWND hWndParent,
- HINSTANCE hInst,
- LPCSTR lpMachineName,
- int nCmdShow)
-{
- 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;
-}
-
-
-/***************************************************************************
-* NAME EXPORTED
-* DeviceManager_ExecuteW
-*
-* DESCRIPTION
-* Starts the Device Manager
-*
-* ARGUMENTS
-* hWndParent: Handle to the parent window
-* hInst: Handle to the application instance
-* lpMachineName: Machine Name, NULL is the local machine
-* nCmdShow: Specifies how the window should be shown
-*
-* RETURN VALUE
-* TRUE: if no errors occured
-* FALSE: if the device manager could not be executed
-*
-* REVISIONS
-*
-* NOTE
-* - Win runs the device manager in a separate process, so hWndParent is somehow
-* obsolete.
-*
-* @implemented
-*/
-BOOL
-WINAPI
-DeviceManager_ExecuteW(HWND hWndParent,
- HINSTANCE hInst,
- LPCWSTR lpMachineName,
- int nCmdShow)
-{
- // FIXME: Call mmc with devmgmt.msc
-
- CDeviceManager DevMgr;
- return DevMgr.Create(hWndParent, hInst, lpMachineName, nCmdShow);
-}
-
-
-/***************************************************************************
-* NAME EXPORTED
-* DeviceProblemWizard_RunDLLA
-*
-* DESCRIPTION
-* Calls the device problem wizard
-*
-* 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
-* - Win XP exports this function as DeviceProblenWizard_RunDLLA, apparently it's
-* a typo so we additionally export an alias function
-* - 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().
-*
-* @unimplemented
-*/
-VOID
-WINAPI
-DeviceProblemWizard_RunDLLA(HWND hWndParent,
- HINSTANCE hInst,
- LPCSTR lpDeviceCmd,
- int nCmdShow)
-{
- UNIMPLEMENTED;
-}
-
-
-/***************************************************************************
-* NAME EXPORTED
-* DeviceProblemWizard_RunDLLW
-*
-* DESCRIPTION
-* Calls the device problem wizard
-*
-* 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
-* - Win XP exports this function as DeviceProblenWizard_RunDLLA, apparently it's
-* a typo so we additionally export an alias function
-* - 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().
-*
-* @unimplemented
-*/
-VOID
-WINAPI
-DeviceProblemWizard_RunDLLW(HWND hWndParent,
- HINSTANCE hInst,
- LPCWSTR lpDeviceCmd,
- int nCmdShow)
-{
- UNIMPLEMENTED;
-}
-
-
-/***************************************************************************
-* NAME EXPORTED
-* DeviceManagerPrintA
-*
-* DESCRIPTION
-* Calls the device problem wizard
-*
-* ARGUMENTS
-* lpMachineName: Machine Name, NULL is the local machine
-* lpPrinter: Filename of the printer where it should be printed on
-* nPrintMode: Specifies what kind of information is to be printed
-* DEV_PRINT_ABSTRACT: Prints an abstract of system information, the parameters
-* uNumberOfGuids, Guids are ignored
-* DEV_PRINT_SELECTED: Prints information about the devices listed in Guids
-* DEV_PRINT_ALL: Prints an abstract of system information and all
-* system devices
-* uNumberOfGuids: Numbers of guids in the Guids array, this parameter is ignored unless
-* nPrintMode is DEV_PRINT_SELECTED
-* lpGuids: Array of device guids, this parameter is ignored unless
-* nPrintMode is DEV_PRINT_SELECTED
-*
-* RETURN VALUE
-* TRUE: if no errors occured
-* FALSE: if errors occured
-*
-* REVISIONS
-*
-* NOTE
-*
-* @unimplemented
-*/
-BOOL
-WINAPI
-DeviceManagerPrintA(LPCSTR lpMachineName,
- LPCSTR lpPrinter,
- int nPrintMode,
- UINT uNumberOfGuids,
- LPGUID lpGuids)
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-
-/***************************************************************************
-* NAME EXPORTED
-* DeviceManagerPrintW
-*
-* DESCRIPTION
-* Calls the device problem wizard
-*
-* ARGUMENTS
-* lpMachineName: Machine Name, NULL is the local machine
-* lpPrinter: Filename of the printer where it should be printed on
-* nPrintMode: Specifies what kind of information is to be printed
-* DEV_PRINT_ABSTRACT: Prints an abstract of system information, the parameters
-* uNumberOfGuids, Guids are ignored
-* DEV_PRINT_SELECTED: Prints information about the devices listed in Guids
-* DEV_PRINT_ALL: Prints an abstract of system information and all
-* system devices
-* uNumberOfGuids: Numbers of guids in the Guids array, this parameter is ignored unless
-* nPrintMode is DEV_PRINT_SELECTED
-* lpGuids: Array of device guids, this parameter is ignored unless
-* nPrintMode is DEV_PRINT_SELECTED
-*
-* RETURN VALUE
-* TRUE: if no errors occured
-* FALSE: if errors occured
-*
-* REVISIONS
-*
-* NOTE
-*
-* @unimplemented
-*/
-BOOL
-WINAPI
-DeviceManagerPrintW(LPCWSTR lpMachineName,
- LPCWSTR lpPrinter,
- int nPrintMode,
- UINT uNumberOfGuids,
- LPGUID lpGuids)
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-class CDevMgrUIModule : public CComModule
-{
-public:
-};
-
-CDevMgrUIModule gModule;
-
-STDAPI DllCanUnloadNow()
-{
- return gModule.DllCanUnloadNow();
-}
-
-STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
- return gModule.DllGetClassObject(rclsid, riid, ppv);
-}
-
-STDAPI DllRegisterServer()
-{
- return gModule.DllRegisterServer(FALSE);
-}
-
-STDAPI DllUnregisterServer()
-{
- return gModule.DllUnregisterServer(FALSE);
-}
-
-extern "C" {
-
-BOOL
-WINAPI
-DllMain(_In_ HINSTANCE hinstDLL,
- _In_ DWORD dwReason,
- _In_ LPVOID lpvReserved)
-{
- switch (dwReason)
- {
- case DLL_PROCESS_ATTACH:
- DisableThreadLibraryCalls(hinstDLL);
- hDllInstance = hinstDLL;
- break;
- }
-
- return TRUE;
-}
-}
\ No newline at end of file