* 04-04-2004 Created
*/
-#include "stdafx.h"
-#include <devmgr\devmgr.h>
+#include "precomp.h"
#include "properties.h"
#include "resource.h"
if (ListView_GetItemCount(hDriversListView) == 0)
{
- if(LoadStringW(hDllInstance, IDS_NODRIVERS, szBuffer, _countof(szBuffer)))
+ if (LoadStringW(hDllInstance, IDS_NODRIVERS, szBuffer, _countof(szBuffer)))
MessageBoxW(hwndDlg, szBuffer, dap->szDevName, MB_OK);
EndDialog(hwndDlg, IDCANCEL);
}
static VOID
SetListViewText(HWND hwnd,
INT iItem,
- LPWSTR lpText)
+ LPCWSTR lpText)
{
LVITEM li;
li.iSubItem = 0;
li.state = 0; //(li.iItem == 0 ? LVIS_SELECTED : 0);
li.stateMask = LVIS_SELECTED;
- li.pszText = lpText;
+ li.pszText = (LPWSTR)lpText;
(void)ListView_InsertItem(hwnd,
&li);
}
static VOID
DisplayClassProperties(IN PDEVADVPROP_INFO dap,
IN HWND hwndListView,
- IN LPWSTR lpProperty)
+ IN LPCWSTR lpProperty)
{
HDEVINFO DeviceInfoSet;
PSP_DEVINFO_DATA DeviceInfoData;
ULONG ulLength = 0;
LPWSTR pszBuffer = NULL, pszStr;
INT index = 0, len;
-
CONFIGRET ret;
ret = CM_Get_Device_ID_List_Size_ExW(&ulLength,
pszBuffer = (LPWSTR)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
- ulLength);
+ ulLength * sizeof(WCHAR));
if (pszBuffer == NULL)
return;
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);
-}