#include <ddk/ntddk.h>
#include <internal/ob.h>
+
+#ifndef __USE_W32API
+#define DEVICE_TYPE_FROM_CTL_CODE(ctlCode) (((ULONG)(ctlCode&0xffff0000))>>16)
+#endif
+
+#define IO_METHOD_FROM_CTL_CODE(ctlCode) (ctlCode&0x00000003)
+
+
+typedef struct _IO_COMPLETION_PACKET{
+ ULONG Key;
+ ULONG Overlapped;
+ IO_STATUS_BLOCK IoStatus;
+ LIST_ENTRY ListEntry;
+} IO_COMPLETION_PACKET, *PIO_COMPLETION_PACKET;
+
+
typedef struct _DEVICE_NODE
{
struct _DEVICE_NODE *Parent;
NTSTATUS
IopCreateDriverObject(PDRIVER_OBJECT *DriverObject,
PUNICODE_STRING ServiceName,
- BOOLEAN FileSystemDriver);
+ BOOLEAN FileSystemDriver,
+ PVOID DriverImageStart,
+ ULONG DriverImageSize);
NTSTATUS
IopInitializeDeviceNodeService(PDEVICE_NODE DeviceNode);
NTSTATUS
IopInitializeDriver(PDRIVER_INITIALIZE DriverEntry,
PDEVICE_NODE DeviceNode,
- BOOLEAN FileSystemDriver);
+ BOOLEAN FileSystemDriver,
+ PVOID DriverImageStart,
+ ULONG DriverImageSize);
VOID
IoInitCancelHandling(VOID);
VOID
POBJECT IoOpenSymlink(POBJECT SymbolicLink);
POBJECT IoOpenFileOnDevice(POBJECT SymbolicLink, PWCHAR Name);
-VOID IoSecondStageCompletion(PIRP Irp, CCHAR PriorityBoost);
+VOID STDCALL
+IoSecondStageCompletion(
+ PKAPC Apc,
+ PKNORMAL_ROUTINE* NormalRoutine,
+ PVOID* NormalContext,
+ PVOID* SystemArgument1,
+ PVOID* SystemArgument2);
NTSTATUS STDCALL
IopCreateFile(PVOID ObjectBody,
PLARGE_INTEGER StartingOffset,
PKEVENT Event,
PIO_STATUS_BLOCK IoStatusBlock,
- ULONG PagingIo);
+ BOOLEAN PagingIo);
VOID IoInitShutdownNotification(VOID);
VOID IoShutdownRegisteredDevices(VOID);
IoDestroyDriverList(VOID);
+/* errlog.c */
+
+NTSTATUS
+IopInitErrorLog (VOID);
+
+
+/* rawfs.c */
+
+BOOLEAN
+RawFsIsRawFileSystemDeviceObject(IN PDEVICE_OBJECT DeviceObject);
+
+NTSTATUS STDCALL
+RawFsDriverEntry(PDRIVER_OBJECT DriverObject,
+ PUNICODE_STRING RegistryPath);
+
+
/* pnproot.c */
NTSTATUS