mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-03 04:13:31 +00:00
Shuffle functions to look more like in Wine.
Add a few stubs svn path=/trunk/; revision=31860
This commit is contained in:
File diff suppressed because it is too large
Load Diff
+2921
-999
File diff suppressed because it is too large
Load Diff
@@ -290,260 +290,6 @@ cleanup:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiEnumDeviceInterfaces (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI
|
||||
SetupDiEnumDeviceInterfaces(
|
||||
IN HDEVINFO DeviceInfoSet,
|
||||
IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL,
|
||||
IN CONST GUID *InterfaceClassGuid,
|
||||
IN DWORD MemberIndex,
|
||||
OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("%p, %p, %s, %ld, %p\n", DeviceInfoSet, DeviceInfoData,
|
||||
debugstr_guid(InterfaceClassGuid), MemberIndex, DeviceInterfaceData);
|
||||
|
||||
if (!DeviceInterfaceData)
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
else if (DeviceInterfaceData->cbSize != sizeof(SP_DEVICE_INTERFACE_DATA))
|
||||
SetLastError(ERROR_INVALID_USER_BUFFER);
|
||||
else if (DeviceInfoSet && DeviceInfoSet != (HDEVINFO)INVALID_HANDLE_VALUE)
|
||||
{
|
||||
struct DeviceInfoSet *list = (struct DeviceInfoSet *)DeviceInfoSet;
|
||||
|
||||
if (list->magic == SETUP_DEVICE_INFO_SET_MAGIC)
|
||||
{
|
||||
PLIST_ENTRY ItemList = list->ListHead.Flink;
|
||||
BOOL Found = FALSE;
|
||||
while (ItemList != &list->ListHead && !Found)
|
||||
{
|
||||
PLIST_ENTRY InterfaceListEntry;
|
||||
struct DeviceInfo *DevInfo = CONTAINING_RECORD(ItemList, struct DeviceInfo, ListEntry);
|
||||
if (DeviceInfoData && (struct DeviceInfo *)DeviceInfoData->Reserved != DevInfo)
|
||||
{
|
||||
/* We are not searching for this element */
|
||||
ItemList = ItemList->Flink;
|
||||
continue;
|
||||
}
|
||||
InterfaceListEntry = DevInfo->InterfaceListHead.Flink;
|
||||
while (InterfaceListEntry != &DevInfo->InterfaceListHead && !Found)
|
||||
{
|
||||
struct DeviceInterface *DevItf = CONTAINING_RECORD(InterfaceListEntry, struct DeviceInterface, ListEntry);
|
||||
if (!IsEqualIID(&DevItf->InterfaceClassGuid, InterfaceClassGuid))
|
||||
{
|
||||
InterfaceListEntry = InterfaceListEntry->Flink;
|
||||
continue;
|
||||
}
|
||||
if (MemberIndex-- == 0)
|
||||
{
|
||||
/* return this item */
|
||||
memcpy(&DeviceInterfaceData->InterfaceClassGuid,
|
||||
&DevItf->InterfaceClassGuid,
|
||||
sizeof(GUID));
|
||||
DeviceInterfaceData->Flags = DevItf->Flags;
|
||||
DeviceInterfaceData->Reserved = (ULONG_PTR)DevItf;
|
||||
Found = TRUE;
|
||||
}
|
||||
InterfaceListEntry = InterfaceListEntry->Flink;
|
||||
}
|
||||
ItemList = ItemList->Flink;
|
||||
}
|
||||
if (!Found)
|
||||
SetLastError(ERROR_NO_MORE_ITEMS);
|
||||
else
|
||||
ret = TRUE;
|
||||
}
|
||||
else
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
}
|
||||
else
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiGetDeviceInterfaceDetailW (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI
|
||||
SetupDiGetDeviceInterfaceDetailW(
|
||||
IN HDEVINFO DeviceInfoSet,
|
||||
IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
|
||||
OUT PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData OPTIONAL,
|
||||
IN DWORD DeviceInterfaceDetailDataSize,
|
||||
OUT PDWORD RequiredSize OPTIONAL,
|
||||
OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("%p %p %p %lu %p %p\n", DeviceInfoSet,
|
||||
DeviceInterfaceData, DeviceInterfaceDetailData,
|
||||
DeviceInterfaceDetailDataSize, RequiredSize, DeviceInfoData);
|
||||
|
||||
if (!DeviceInfoSet || !DeviceInterfaceData)
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
else if (DeviceInfoSet == (HDEVINFO)INVALID_HANDLE_VALUE)
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
else if (((struct DeviceInfoSet *)DeviceInfoSet)->magic != SETUP_DEVICE_INFO_SET_MAGIC)
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
else if (DeviceInterfaceData->cbSize != sizeof(SP_DEVICE_INTERFACE_DATA))
|
||||
SetLastError(ERROR_INVALID_USER_BUFFER);
|
||||
else if (DeviceInterfaceDetailData->cbSize != sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W))
|
||||
SetLastError(ERROR_INVALID_USER_BUFFER);
|
||||
else if (DeviceInfoData && DeviceInfoData->cbSize != sizeof(SP_DEVINFO_DATA))
|
||||
SetLastError(ERROR_INVALID_USER_BUFFER);
|
||||
else if (DeviceInterfaceDetailData == NULL && DeviceInterfaceDetailDataSize != 0)
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
else if (DeviceInterfaceDetailData != NULL && DeviceInterfaceDetailDataSize < FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath) + sizeof(WCHAR))
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
else
|
||||
{
|
||||
struct DeviceInterface *deviceInterface = (struct DeviceInterface *)DeviceInterfaceData->Reserved;
|
||||
LPCWSTR devName = deviceInterface->SymbolicLink;
|
||||
DWORD sizeRequired = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W) +
|
||||
(lstrlenW(devName) + 1) * sizeof(WCHAR);
|
||||
|
||||
if (sizeRequired > DeviceInterfaceDetailDataSize)
|
||||
{
|
||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||
if (RequiredSize)
|
||||
*RequiredSize = sizeRequired;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpyW(DeviceInterfaceDetailData->DevicePath, devName);
|
||||
TRACE("DevicePath is %s\n", debugstr_w(DeviceInterfaceDetailData->DevicePath));
|
||||
if (DeviceInfoData)
|
||||
{
|
||||
memcpy(&DeviceInfoData->ClassGuid,
|
||||
&deviceInterface->DeviceInfo->ClassGuid,
|
||||
sizeof(GUID));
|
||||
DeviceInfoData->DevInst = deviceInterface->DeviceInfo->dnDevInst;
|
||||
DeviceInfoData->Reserved = (ULONG_PTR)deviceInterface->DeviceInfo;
|
||||
}
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
TRACE("Returning %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiGetDeviceInterfaceDetailA (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI
|
||||
SetupDiGetDeviceInterfaceDetailA(
|
||||
IN HDEVINFO DeviceInfoSet,
|
||||
IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
|
||||
OUT PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData OPTIONAL,
|
||||
IN DWORD DeviceInterfaceDetailDataSize,
|
||||
OUT PDWORD RequiredSize OPTIONAL,
|
||||
OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
|
||||
{
|
||||
PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailDataW = NULL;
|
||||
DWORD sizeW = 0, sizeA;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("%p %p %p %lu %p %p\n", DeviceInfoSet,
|
||||
DeviceInterfaceData, DeviceInterfaceDetailData,
|
||||
DeviceInterfaceDetailDataSize, RequiredSize, DeviceInfoData);
|
||||
|
||||
if (DeviceInterfaceDetailData->cbSize != sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A))
|
||||
SetLastError(ERROR_INVALID_USER_BUFFER);
|
||||
else if (DeviceInterfaceDetailData == NULL && DeviceInterfaceDetailDataSize != 0)
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
else if (DeviceInterfaceDetailData != NULL && DeviceInterfaceDetailDataSize < FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_A, DevicePath) + 1)
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
else
|
||||
{
|
||||
if (DeviceInterfaceDetailData != NULL)
|
||||
{
|
||||
sizeW = FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath)
|
||||
+ (DeviceInterfaceDetailDataSize - FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_A, DevicePath)) * sizeof(WCHAR);
|
||||
DeviceInterfaceDetailDataW = (PSP_DEVICE_INTERFACE_DETAIL_DATA_W)HeapAlloc(GetProcessHeap(), 0, sizeW);
|
||||
if (!DeviceInterfaceDetailDataW)
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
}
|
||||
}
|
||||
if (!DeviceInterfaceDetailData || (DeviceInterfaceDetailData && DeviceInterfaceDetailDataW))
|
||||
{
|
||||
DeviceInterfaceDetailDataW->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W);
|
||||
ret = SetupDiGetDeviceInterfaceDetailW(
|
||||
DeviceInfoSet,
|
||||
DeviceInterfaceData,
|
||||
DeviceInterfaceDetailDataW,
|
||||
sizeW,
|
||||
&sizeW,
|
||||
DeviceInfoData);
|
||||
sizeA = (sizeW - FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath)) / sizeof(WCHAR)
|
||||
+ FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_A, DevicePath);
|
||||
if (RequiredSize)
|
||||
*RequiredSize = sizeA;
|
||||
if (ret && DeviceInterfaceDetailData && DeviceInterfaceDetailDataSize <= sizeA)
|
||||
{
|
||||
if (!WideCharToMultiByte(
|
||||
CP_ACP, 0,
|
||||
DeviceInterfaceDetailDataW->DevicePath, -1,
|
||||
DeviceInterfaceDetailData->DevicePath, DeviceInterfaceDetailDataSize - FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_A, DevicePath),
|
||||
NULL, NULL))
|
||||
{
|
||||
ret = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, DeviceInterfaceDetailDataW);
|
||||
}
|
||||
|
||||
TRACE("Returning %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiOpenDeviceInterfaceA (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI
|
||||
SetupDiOpenDeviceInterfaceA(
|
||||
IN HDEVINFO DeviceInfoSet,
|
||||
IN PCSTR DevicePath,
|
||||
IN DWORD OpenFlags,
|
||||
OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL)
|
||||
{
|
||||
LPWSTR DevicePathW = NULL;
|
||||
BOOL bResult;
|
||||
|
||||
TRACE("%p %s %08lx %p\n", DeviceInfoSet, debugstr_a(DevicePath), OpenFlags, DeviceInterfaceData);
|
||||
|
||||
DevicePathW = MultiByteToUnicode(DevicePath, CP_ACP);
|
||||
if (DevicePathW == NULL)
|
||||
return FALSE;
|
||||
|
||||
bResult = SetupDiOpenDeviceInterfaceW(DeviceInfoSet,
|
||||
DevicePathW, OpenFlags, DeviceInterfaceData);
|
||||
|
||||
MyFree(DevicePathW);
|
||||
|
||||
return bResult;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiOpenDeviceInterfaceW (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI
|
||||
SetupDiOpenDeviceInterfaceW(
|
||||
IN HDEVINFO DeviceInfoSet,
|
||||
IN PCWSTR DevicePath,
|
||||
IN DWORD OpenFlags,
|
||||
OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL)
|
||||
{
|
||||
FIXME("%p %s %08lx %p\n",
|
||||
DeviceInfoSet, debugstr_w(DevicePath), OpenFlags, DeviceInterfaceData);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static BOOL
|
||||
InstallOneInterface(
|
||||
IN LPGUID InterfaceGuid,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* Copyright 2001 Andreas Mohr
|
||||
* Copyright 2004 David Kredba
|
||||
*
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
|
||||
@@ -289,13 +289,14 @@
|
||||
@ stdcall SetupDiCreateDeviceInfoListExA(ptr long str ptr)
|
||||
@ stdcall SetupDiCreateDeviceInfoListExW(ptr long wstr ptr)
|
||||
@ stdcall SetupDiCreateDeviceInfoW(ptr wstr ptr wstr ptr long ptr)
|
||||
@ stub SetupDiCreateDeviceInterfaceA
|
||||
@ stub SetupDiCreateDeviceInterfaceW
|
||||
@ stub SetupDiCreateDeviceInterfaceRegKeyA
|
||||
@ stub SetupDiCreateDeviceInterfaceRegKeyW
|
||||
@ stdcall SetupDiCreateDeviceInterfaceA(ptr ptr ptr str long ptr)
|
||||
@ stdcall SetupDiCreateDeviceInterfaceW(ptr ptr ptr wstr long ptr)
|
||||
@ stdcall SetupDiCreateDeviceInterfaceRegKeyA(ptr ptr long long ptr ptr)
|
||||
@ stdcall SetupDiCreateDeviceInterfaceRegKeyW(ptr ptr long long ptr ptr)
|
||||
@ stdcall SetupDiDeleteDevRegKey(ptr ptr long long long)
|
||||
@ stdcall SetupDiDeleteDeviceInfo(long ptr)
|
||||
@ stub SetupDiDeleteDeviceInterfaceData
|
||||
@ stdcall SetupDiDeleteDeviceInterfaceRegKey(ptr ptr long)
|
||||
@ stdcall SetupDiDestroyClassImageList(ptr)
|
||||
@ stdcall SetupDiDestroyDeviceInfoList(long)
|
||||
@ stdcall SetupDiDestroyDriverInfoList(long ptr long)
|
||||
|
||||
@@ -127,11 +127,11 @@ struct DeviceInfo /* Element of DeviceInfoSet.ListHead */
|
||||
SP_DEVINSTALL_PARAMS_W InstallParams;
|
||||
|
||||
/* Information about devnode:
|
||||
* - DeviceName:
|
||||
* - instanceId:
|
||||
* "Root\*PNP0501" for example.
|
||||
* It doesn't contain the unique ID for the device
|
||||
* (points into the Data field at the end of the structure)
|
||||
* WARNING: no NULL char exist between DeviceName and UniqueId
|
||||
* WARNING: no NULL char exist between instanceId and UniqueId
|
||||
* in Data field!
|
||||
* - UniqueId
|
||||
* "5&1be2108e&0" or "0000"
|
||||
@@ -151,7 +151,7 @@ struct DeviceInfo /* Element of DeviceInfoSet.ListHead */
|
||||
* - DICD_INHERIT_CLASSDRVS
|
||||
* inherit driver of the device info set (== same pointer)
|
||||
*/
|
||||
PCWSTR DeviceName;
|
||||
PCWSTR instanceId;
|
||||
PCWSTR UniqueId;
|
||||
PCWSTR DeviceDescription;
|
||||
GUID ClassGuid;
|
||||
@@ -167,7 +167,7 @@ struct DeviceInfo /* Element of DeviceInfoSet.ListHead */
|
||||
/* Used by SetupDiGetClassInstallParamsW/SetupDiSetClassInstallParamsW */
|
||||
struct ClassInstallParams ClassInstallParams;
|
||||
|
||||
/* Variable size array (contains data for DeviceName, UniqueId, DeviceDescription) */
|
||||
/* Variable size array (contains data for instanceId, UniqueId, DeviceDescription) */
|
||||
WCHAR Data[ANYSIZE_ARRAY];
|
||||
};
|
||||
|
||||
|
||||
@@ -422,7 +422,7 @@ StringTableDuplicate(HSTRING_TABLE hStringTable)
|
||||
pDestinationTable = MyMalloc(sizeof(STRING_TABLE));
|
||||
if (pDestinationTable == NULL)
|
||||
{
|
||||
ERR("Cound not allocate a new string table!\n");
|
||||
ERR("Could not allocate a new string table!\n");
|
||||
return (HSTRING_TABLE)NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -130,25 +130,6 @@ BOOL WINAPI SetupSetSourceListW(DWORD flags, PCWSTR *list, UINT count)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiRegisterDeviceInfo(SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI
|
||||
SetupDiRegisterDeviceInfo(
|
||||
IN HDEVINFO DeviceInfoSet,
|
||||
IN PSP_DEVINFO_DATA DeviceInfoData,
|
||||
IN DWORD Flags,
|
||||
IN PSP_DETSIG_CMPPROC CompareProc OPTIONAL,
|
||||
IN PVOID CompareContext OPTIONAL,
|
||||
OUT PSP_DEVINFO_DATA DupDeviceInfoData OPTIONAL)
|
||||
{
|
||||
FIXME ("Stub %p %p 0x%lx %p %p %p\n", DeviceInfoSet, DeviceInfoData,
|
||||
Flags, CompareProc, CompareContext, DupDeviceInfoData);
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiRemoveDevice(SETUPAPI.@)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user