mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 00:55:48 +00:00
- Add a minimal implementation of SetupScanFileQueueW
- In SetupDiBuildDriverInfoList, add found drivers in the right driver list - In SetupDiEnumDriverInfoW, enumerate the right driver list if DeviceInfoData is not NULL svn path=/trunk/; revision=20394
This commit is contained in:
parent
83ee9cec35
commit
37faec1dc1
2 changed files with 47 additions and 10 deletions
|
@ -5389,6 +5389,7 @@ SetupDiBuildDriverInfoList(
|
||||||
SetLastError(ERROR_INVALID_USER_BUFFER);
|
SetLastError(ERROR_INVALID_USER_BUFFER);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
PLIST_ENTRY pDriverListHead = &list->DriverListHead;
|
||||||
BOOL Result;
|
BOOL Result;
|
||||||
|
|
||||||
InstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS_W);
|
InstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS_W);
|
||||||
|
@ -5396,6 +5397,13 @@ SetupDiBuildDriverInfoList(
|
||||||
if (!Result)
|
if (!Result)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
if (DeviceInfoData)
|
||||||
|
{
|
||||||
|
struct DeviceInfoElement *devInfo = (struct DeviceInfoElement *)DeviceInfoData->Reserved;
|
||||||
|
if (!(devInfo->CreationFlags & DICD_INHERIT_CLASSDRVS))
|
||||||
|
pDriverListHead = &devInfo->DriverListHead;
|
||||||
|
}
|
||||||
|
|
||||||
if (DriverType == SPDIT_COMPATDRIVER)
|
if (DriverType == SPDIT_COMPATDRIVER)
|
||||||
{
|
{
|
||||||
/* Get hardware IDs list */
|
/* Get hardware IDs list */
|
||||||
|
@ -5633,7 +5641,7 @@ SetupDiBuildDriverInfoList(
|
||||||
{
|
{
|
||||||
/* FIXME: read [ControlFlags] / ExcludeFromSelect */
|
/* FIXME: read [ControlFlags] / ExcludeFromSelect */
|
||||||
if (!AddDriverToList(
|
if (!AddDriverToList(
|
||||||
&list->DriverListHead,
|
pDriverListHead,
|
||||||
DriverType,
|
DriverType,
|
||||||
&ClassGuid,
|
&ClassGuid,
|
||||||
ContextDevice,
|
ContextDevice,
|
||||||
|
@ -5689,7 +5697,7 @@ SetupDiBuildDriverInfoList(
|
||||||
if (wcsicmp(DeviceId, currentId) == 0)
|
if (wcsicmp(DeviceId, currentId) == 0)
|
||||||
{
|
{
|
||||||
AddDriverToList(
|
AddDriverToList(
|
||||||
&((struct DeviceInfoElement *)DeviceInfoData->Reserved)->DriverListHead,
|
pDriverListHead,
|
||||||
DriverType,
|
DriverType,
|
||||||
&ClassGuid,
|
&ClassGuid,
|
||||||
ContextDevice,
|
ContextDevice,
|
||||||
|
@ -5710,7 +5718,7 @@ SetupDiBuildDriverInfoList(
|
||||||
if (wcsicmp(DeviceId, currentId) == 0)
|
if (wcsicmp(DeviceId, currentId) == 0)
|
||||||
{
|
{
|
||||||
AddDriverToList(
|
AddDriverToList(
|
||||||
&((struct DeviceInfoElement *)DeviceInfoData->Reserved)->DriverListHead,
|
pDriverListHead,
|
||||||
DriverType,
|
DriverType,
|
||||||
&ClassGuid,
|
&ClassGuid,
|
||||||
ContextDevice,
|
ContextDevice,
|
||||||
|
@ -6106,8 +6114,6 @@ SetupDiEnumDriverInfoW(
|
||||||
SetLastError(ERROR_INVALID_HANDLE);
|
SetLastError(ERROR_INVALID_HANDLE);
|
||||||
else if (DriverType != SPDIT_CLASSDRIVER && DriverType != SPDIT_COMPATDRIVER)
|
else if (DriverType != SPDIT_CLASSDRIVER && DriverType != SPDIT_COMPATDRIVER)
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
else if (DriverType == SPDIT_CLASSDRIVER && DeviceInfoData)
|
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
|
||||||
else if (DriverType == SPDIT_COMPATDRIVER && !DeviceInfoData)
|
else if (DriverType == SPDIT_COMPATDRIVER && !DeviceInfoData)
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
else if (DriverInfoData->cbSize != sizeof(SP_DRVINFO_DATA_V1_W) && DriverInfoData->cbSize != sizeof(SP_DRVINFO_DATA_V2_W))
|
else if (DriverInfoData->cbSize != sizeof(SP_DRVINFO_DATA_V1_W) && DriverInfoData->cbSize != sizeof(SP_DRVINFO_DATA_V2_W))
|
||||||
|
@ -6118,8 +6124,7 @@ SetupDiEnumDriverInfoW(
|
||||||
PLIST_ENTRY ItemList;
|
PLIST_ENTRY ItemList;
|
||||||
if (DeviceInfoData)
|
if (DeviceInfoData)
|
||||||
devInfo = (struct DeviceInfoElement *)DeviceInfoData->Reserved;
|
devInfo = (struct DeviceInfoElement *)DeviceInfoData->Reserved;
|
||||||
if (DriverType == SPDIT_CLASSDRIVER ||
|
if (!devInfo || (devInfo->CreationFlags & DICD_INHERIT_CLASSDRVS))
|
||||||
(devInfo && devInfo->CreationFlags & DICD_INHERIT_CLASSDRVS))
|
|
||||||
{
|
{
|
||||||
ListHead = &((struct DeviceInfoSet *)DeviceInfoSet)->DriverListHead;
|
ListHead = &((struct DeviceInfoSet *)DeviceInfoSet)->DriverListHead;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1200,11 +1200,43 @@ BOOL WINAPI SetupScanFileQueueA( HSPFILEQ queue, DWORD flags, HWND window,
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SetupScanFileQueueW (SETUPAPI.@)
|
* SetupScanFileQueueW (SETUPAPI.@)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI SetupScanFileQueueW( HSPFILEQ queue, DWORD flags, HWND window,
|
BOOL WINAPI SetupScanFileQueueW( HSPFILEQ handle, DWORD flags, HWND window,
|
||||||
PSP_FILE_CALLBACK_W callback, PVOID context, PDWORD result )
|
PSP_FILE_CALLBACK_W callback, PVOID context, PDWORD result )
|
||||||
{
|
{
|
||||||
FIXME("stub\n");
|
struct file_queue *queue = handle;
|
||||||
return FALSE;
|
struct file_op *op;
|
||||||
|
BOOL allnodesprocessed = FALSE;
|
||||||
|
FILEPATHS_W paths;
|
||||||
|
|
||||||
|
paths.Source = paths.Target = NULL;
|
||||||
|
*result = FALSE;
|
||||||
|
|
||||||
|
if ( flags & (SPQ_SCAN_FILE_PRESENCE | SPQ_SCAN_FILE_VALIDITY | SPQ_SCAN_USE_CALLBACKEX | SPQ_SCAN_INFORM_USER | SPQ_SCAN_PRUNE_COPY_QUEUE /*| SPQ_SCAN_USE_CALLBACK_SIGNERINFO | SPQ_SCAN_PRUNE_DELREN*/) )
|
||||||
|
{
|
||||||
|
FIXME( "flags ignored 0x%lx\n", flags & (SPQ_SCAN_FILE_PRESENCE | SPQ_SCAN_FILE_VALIDITY | SPQ_SCAN_USE_CALLBACKEX | SPQ_SCAN_INFORM_USER | SPQ_SCAN_PRUNE_COPY_QUEUE /*| SPQ_SCAN_USE_CALLBACK_SIGNERINFO | SPQ_SCAN_PRUNE_DELREN*/) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (queue->copy_queue.count)
|
||||||
|
{
|
||||||
|
for (op = queue->copy_queue.head; op; op = op->next)
|
||||||
|
{
|
||||||
|
build_filepathsW( op, &paths );
|
||||||
|
if (flags & SPQ_SCAN_USE_CALLBACK)
|
||||||
|
{
|
||||||
|
/* FIXME: sometimes set param 2 to SPQ_DELAYED_COPY */
|
||||||
|
if (NO_ERROR != callback( context, SPFILENOTIFY_QUEUESCAN, (UINT)paths.Target, 0 ))
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*result = TRUE;
|
||||||
|
allnodesprocessed = TRUE;
|
||||||
|
|
||||||
|
done:
|
||||||
|
HeapFree( GetProcessHeap(), 0, (void *)paths.Source );
|
||||||
|
HeapFree( GetProcessHeap(), 0, (void *)paths.Target );
|
||||||
|
return allnodesprocessed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue