Juan Lang : setupapi: Implement SetupDiGetDeviceInstanceIdA on top of SetupDiGetDeviceInstanceIdW .
Alexandre Julliard
julliard at winehq.org
Thu Sep 20 10:30:05 CDT 2007
Module: wine
Branch: master
Commit: c1ccd65792cc003bcac08d5ceeaac17b80447919
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c1ccd65792cc003bcac08d5ceeaac17b80447919
Author: Juan Lang <juan.lang at gmail.com>
Date: Wed Sep 19 17:47:52 2007 -0700
setupapi: Implement SetupDiGetDeviceInstanceIdA on top of SetupDiGetDeviceInstanceIdW.
---
dlls/setupapi/devinst.c | 38 ++++++++++++++++++++++++++++++++++++--
1 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index d1e9642..e567670 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -813,9 +813,42 @@ BOOL WINAPI SetupDiGetDeviceInstanceIdA(
DWORD DeviceInstanceIdSize,
PDWORD RequiredSize)
{
- FIXME("%p %p %p %d %p\n", DeviceInfoSet, DeviceInfoData, DeviceInstanceId,
+ BOOL ret = FALSE;
+ DWORD size;
+ PWSTR instanceId;
+
+ TRACE("%p %p %p %d %p\n", DeviceInfoSet, DeviceInfoData, DeviceInstanceId,
DeviceInstanceIdSize, RequiredSize);
- return FALSE;
+
+ SetupDiGetDeviceInstanceIdW(DeviceInfoSet,
+ DeviceInfoData,
+ NULL,
+ 0,
+ &size);
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
+ return FALSE;
+ instanceId = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR));
+ if (instanceId)
+ {
+ ret = SetupDiGetDeviceInstanceIdW(DeviceInfoSet,
+ DeviceInfoData,
+ instanceId,
+ size,
+ &size);
+ if (ret)
+ {
+ int len = WideCharToMultiByte(CP_ACP, 0, instanceId, -1,
+ DeviceInstanceId,
+ DeviceInstanceIdSize, NULL, NULL);
+
+ if (!len)
+ ret = FALSE;
+ else if (RequiredSize)
+ *RequiredSize = len;
+ }
+ HeapFree(GetProcessHeap(), 0, instanceId);
+ }
+ return ret;
}
/***********************************************************************
@@ -830,6 +863,7 @@ BOOL WINAPI SetupDiGetDeviceInstanceIdW(
{
FIXME("%p %p %p %d %p\n", DeviceInfoSet, DeviceInfoData, DeviceInstanceId,
DeviceInstanceIdSize, RequiredSize);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
More information about the wine-cvs
mailing list