Juan Lang : setupapi: Implement SetupDiEnumDeviceInfo.
Alexandre Julliard
julliard at winehq.org
Thu Sep 20 10:30:05 CDT 2007
Module: wine
Branch: master
Commit: 634cba84d2fc548594276a26d672e4117a527956
URL: http://source.winehq.org/git/wine.git/?a=commit;h=634cba84d2fc548594276a26d672e4117a527956
Author: Juan Lang <juan.lang at gmail.com>
Date: Wed Sep 19 17:46:58 2007 -0700
setupapi: Implement SetupDiEnumDeviceInfo.
---
dlls/setupapi/devinst.c | 31 +++++++++++++++++++++++++++----
1 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 414aa18..d1e9642 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -769,15 +769,38 @@ BOOL WINAPI SetupDiEnumDeviceInfo(
DWORD index,
PSP_DEVINFO_DATA info)
{
- FIXME("%p %d %p\n", devinfo, index, info);
+ BOOL ret = FALSE;
+
+ TRACE("%p %d %p\n", devinfo, index, info);
if(info==NULL)
return FALSE;
if(info->cbSize < sizeof(*info))
return FALSE;
-
- SetLastError(ERROR_NO_MORE_ITEMS);
- return FALSE;
+ if (devinfo && devinfo != (HDEVINFO)INVALID_HANDLE_VALUE)
+ {
+ struct DeviceInfoSet *list = (struct DeviceInfoSet *)devinfo;
+ if (list->magic == SETUP_DEVICE_INFO_SET_MAGIC)
+ {
+ if (index < list->cDevices)
+ {
+ if (info->cbSize == sizeof(SP_DEVINFO_DATA))
+ {
+ memcpy(info, &list->devices[index], info->cbSize);
+ ret = TRUE;
+ }
+ else
+ SetLastError(ERROR_INVALID_USER_BUFFER);
+ }
+ else
+ SetLastError(ERROR_NO_MORE_ITEMS);
+ }
+ else
+ SetLastError(ERROR_INVALID_HANDLE);
+ }
+ else
+ SetLastError(ERROR_INVALID_HANDLE);
+ return ret;
}
/***********************************************************************
More information about the wine-cvs
mailing list