PVOID Context;
} DEVICETREE_TRAVERSE_CONTEXT, *PDEVICETREE_TRAVERSE_CONTEXT;
+//
+// Reserve IRP allocator
+// Used for read paging IOs in low-memory situations
+//
+typedef struct _RESERVE_IRP_ALLOCATOR
+{
+ PIRP ReserveIrp;
+ volatile LONG ReserveIrpInUse;
+ KEVENT WaitEvent;
+ CCHAR StackSize;
+} RESERVE_IRP_ALLOCATOR, *PRESERVE_IRP_ALLOCATOR;
+
//
// Resource code
//
OUT PULONG Signature
);
+BOOLEAN
+NTAPI
+IoInitializeCrashDump(
+ IN HANDLE PageFileHandle
+);
+
//
// Device/Volume Routines
//
IN CCHAR StackSize
);
+BOOLEAN
+NTAPI
+IopInitializeReserveIrp(
+ IN PRESERVE_IRP_ALLOCATOR ReserveIrpAllocator
+);
+
+PIRP
+NTAPI
+IopAllocateReserveIrp(
+ IN CCHAR StackSize
+);
+
//
// Shutdown routines
//
NTAPI
IopCreateDriver(IN PUNICODE_STRING DriverName OPTIONAL,
IN PDRIVER_INITIALIZE InitializationFunction,
- IN PUNICODE_STRING RegistryPath,
+ IN PUNICODE_STRING RegistryPath OPTIONAL,
IN PCUNICODE_STRING ServiceName,
- PLDR_DATA_TABLE_ENTRY ModuleObject,
+ IN PLDR_DATA_TABLE_ENTRY ModuleObject OPTIONAL,
OUT PDRIVER_OBJECT *pDriverObject);
VOID
extern PVOID IopTriageDumpDataBlocks[64];
extern PIO_BUS_TYPE_GUID_LIST PnpBusTypeGuidList;
extern PDRIVER_OBJECT IopRootDriverObject;
-extern KSPIN_LOCK IopDeviceRelationsSpinLock;
-extern LIST_ENTRY IopDeviceRelationsRequestList;
+extern KSPIN_LOCK IopDeviceActionLock;
+extern LIST_ENTRY IopDeviceActionRequestList;
+extern RESERVE_IRP_ALLOCATOR IopReserveIrpAllocator;
//
// Inlined Functions