KeInsertDeviceQueue
UINT8 __stdcall KeInsertDeviceQueue(_KDEVICE_QUEUE *DeviceQueue, _KDEVICE_QUEUE_ENTRY *DeviceQueueEntry){
unsigned __int8 v4;
unsigned __int8 Busy;
_LIST_ENTRY *Blink;
struct _KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
v4 = 0;
KeAcquireInStackQueuedSpinLockForDpc(&DeviceQueue->Lock, &LockHandle);
Busy = DeviceQueue->Busy;
DeviceQueue->Busy = 1;
if( Busy == 1 )
{
Blink = DeviceQueue->DeviceListHead.Blink;
if( Blink->Flink != &DeviceQueue->DeviceListHead )
__fastfail(3u);
DeviceQueueEntry->DeviceListEntry.Flink = &DeviceQueue->DeviceListHead;
v4 = 1;
DeviceQueueEntry->DeviceListEntry.Blink = Blink;
Blink->Flink = &DeviceQueueEntry->DeviceListEntry;
DeviceQueue->DeviceListHead.Blink = &DeviceQueueEntry->DeviceListEntry;
}
DeviceQueueEntry->Inserted = v4;
KeReleaseInStackQueuedSpinLockForDpc(&LockHandle);
return v4;
}Referenced by:
HalAllocateAdapterChannelV2
IoAllocateController
IoStartPacket