#ifndef _INCLUDE_DDK_IOFUNCS_H
#define _INCLUDE_DDK_IOFUNCS_H
-/* $Id: iofuncs.h,v 1.15 2000/06/30 22:49:26 ekohl Exp $ */
+/* $Id: iofuncs.h,v 1.34 2002/10/03 19:26:46 robd Exp $ */
/* --- EXPORTED BY NTOSKRNL --- */
* PUNICODE_STRING DeviceName
* );
*/
-#define IoAssignArcName (ArcName, DeviceName) \
- (IoCreateSymbolicLink ((ArcName), (DeviceName)))
+#define IoAssignArcName(ArcName,DeviceName) \
+ (IoCreateSymbolicLink((ArcName),(DeviceName)))
/**********************************************************************
* NAME EXPORTED
IoCancelIrp (
PIRP Irp
);
-VOID
-STDCALL
-IoCheckDesiredAccess (
- DWORD Unknown0,
- DWORD Unknown1
- );
-NTSTATUS
-STDCALL
-IoCheckEaBufferValidity (
- DWORD Unknown0,
- DWORD Unknown1,
- DWORD Unknown2
- );
-NTSTATUS
-STDCALL
-IoCheckFunctionAccess (
- DWORD Unknown0,
- DWORD Unknown1,
- DWORD Unknown2,
- DWORD Unknown3,
- DWORD Unknown4,
- DWORD Unknown5
- );
+
+NTSTATUS STDCALL
+IoCheckDesiredAccess(IN OUT PACCESS_MASK DesiredAccess,
+ IN ACCESS_MASK GrantedAccess);
+
+NTSTATUS STDCALL
+IoCheckEaBufferValidity(IN PFILE_FULL_EA_INFORMATION EaBuffer,
+ IN ULONG EaLength,
+ OUT PULONG ErrorOffset);
+
+NTSTATUS STDCALL
+IoCheckFunctionAccess(IN ACCESS_MASK GrantedAccess,
+ IN UCHAR MajorFunction,
+ IN UCHAR MinorFunction,
+ IN ULONG IoControlCode,
+ IN PFILE_INFORMATION_CLASS FileInformationClass OPTIONAL,
+ IN PFS_INFORMATION_CLASS FsInformationClass OPTIONAL);
+
NTSTATUS
STDCALL
IoCheckShareAccess (
KAFFINITY ProcessorEnableMask,
BOOLEAN FloatingSave
);
+
PCONTROLLER_OBJECT
STDCALL
IoCreateController (
IoEnqueueIrp (
PIRP Irp
);
-VOID
-STDCALL
-IoFastQueryNetworkAttributes (
- DWORD Unknown0,
- DWORD Unknown1,
- DWORD Unknown2,
- DWORD Unknown3,
- DWORD Unknown4
- );
+
+BOOLEAN STDCALL
+IoFastQueryNetworkAttributes(IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN ACCESS_MASK DesiredAccess,
+ IN ULONG OpenOptions,
+ OUT PIO_STATUS_BLOCK IoStatus,
+ OUT PFILE_NETWORK_OPEN_INFORMATION Buffer);
+
VOID
STDCALL
IoFreeController (
);
PDEVICE_OBJECT
STDCALL
+IoGetAttachedDeviceReference (
+ PDEVICE_OBJECT DeviceObject
+ );
+PDEVICE_OBJECT
+STDCALL
IoGetBaseFileSystemDeviceObject (
IN PFILE_OBJECT FileObject
);
* PIO_STACK_LOCATION
* IoGetCurrentIrpStackLocation (PIRP Irp)
*/
-#define IoGetCurrentIrpStackLocation(Irp) \
- (&(Irp)->Stack[(ULONG)((Irp)->CurrentLocation)])
-
-/* original macro */
-/*
#define IoGetCurrentIrpStackLocation(Irp) \
((Irp)->Tail.Overlay.CurrentStackLocation)
-*/
-PEPROCESS
+
+#define IoSetNextIrpStackLocation(Irp) { \
+ (Irp)->CurrentLocation--; \
+ (Irp)->Tail.Overlay.CurrentStackLocation--; }
+
+#define IoCopyCurrentIrpStackLocationToNext(Irp) { \
+ PIO_STACK_LOCATION IrpSp; \
+ PIO_STACK_LOCATION NextIrpSp; \
+ IrpSp = IoGetCurrentIrpStackLocation((Irp)); \
+ NextIrpSp = IoGetNextIrpStackLocation((Irp)); \
+ RtlCopyMemory(NextIrpSp, IrpSp, \
+ FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
+ NextIrpSp->Control = 0; }
+
+#define IoSkipCurrentIrpStackLocation(Irp) \
+ (Irp)->CurrentLocation++; \
+ (Irp)->Tail.Overlay.CurrentStackLocation++;
+
+struct _EPROCESS*
STDCALL
IoGetCurrentProcess (
VOID
PDEVICE_OBJECT
STDCALL
IoGetDeviceToVerify (
- PETHREAD Thread
+ struct _ETHREAD* Thread
);
PGENERIC_MAPPING
STDCALL
* PIO_STACK_LOCATION
* IoGetNextIrpStackLocation (PIRP Irp)
*/
-#define IoGetNextIrpStackLocation(Irp) \
- (&(Irp)->Stack[(Irp)->CurrentLocation-1])
-
-/* original macro */
-/*
#define IoGetNextIrpStackLocation(Irp) \
((Irp)->Tail.Overlay.CurrentStackLocation-1)
-*/
+
PDEVICE_OBJECT
STDCALL
IoGetRelatedDeviceObject (
PFILE_OBJECT FileObject
);
-PEPROCESS
+struct _EPROCESS*
STDCALL
IoGetRequestorProcess (
IN PIRP Irp
);
+
VOID
STDCALL
IoGetStackLimits (
- PVOID * Minimum, /* guess */
- PVOID * Maximum /* guess */
+ PULONG LowLimit,
+ PULONG HighLimit
);
+
PIRP
STDCALL
IoGetTopLevelIrp (
VOID
);
-#define IoInitializeDpcRequest(DeviceObject, DpcRoutine) \
+#define IoInitializeDpcRequest(DeviceObject,DpcRoutine) \
(KeInitializeDpc(&(DeviceObject)->Dpc, \
(PKDEFERRED_ROUTINE)(DpcRoutine), \
(DeviceObject)))
);
NTSTATUS
STDCALL
-IoPageRead (
- PFILE_OBJECT FileObject,
- PMDL Mdl,
- PLARGE_INTEGER Offset,
- PIO_STATUS_BLOCK StatusBlock
- );
-NTSTATUS
-STDCALL
IoQueryDeviceDescription (
PINTERFACE_TYPE BusType,
PULONG BusNumber,
VOID
STDCALL
IoQueueThreadIrp (
- PVOID Unknown0
+ IN PIRP Irp
);
+
+typedef struct _IO_WORKITEM *PIO_WORKITEM;
+typedef VOID (*PIO_WORKITEM_ROUTINE)(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context);
+
+VOID
+STDCALL
+IoQueueWorkItem(
+ IN PIO_WORKITEM IoWorkItem,
+ IN PIO_WORKITEM_ROUTINE WorkerRoutine,
+ IN WORK_QUEUE_TYPE QueueType,
+ IN PVOID Context
+ );
+
+VOID
+STDCALL
+IoFreeWorkItem(
+ PIO_WORKITEM IoWorkItem
+ );
+
+PIO_WORKITEM
+STDCALL
+IoAllocateWorkItem(
+ PDEVICE_OBJECT DeviceObject
+ );
+
VOID
STDCALL
IoRaiseHardError (
IoRaiseInformationalHardError (
NTSTATUS ErrorStatus,
PUNICODE_STRING String,
- PKTHREAD Thread
+ struct _KTHREAD* Thread
);
VOID
STDCALL
NTSTATUS
STDCALL
IoReportHalResourceUsage (
- PUNICODE_STRING HalDescription,
- ULONG Unknown1,
- ULONG Unknown2,
- ULONG Unknown3
+ IN PUNICODE_STRING HalDescription,
+ IN PCM_RESOURCE_LIST RawList,
+ IN PCM_RESOURCE_LIST TranslatedList,
+ IN ULONG ListSize
);
NTSTATUS
STDCALL
PBOOLEAN ConflictDetected
);
-#define IoRequestDpc(DeviceObject, Irp, Context) \
+#define IoRequestDpc(DeviceObject,Irp,Context) \
(KeInsertQueueDpc(&(DeviceObject)->Dpc,(Irp),(Context)))
-#define IoSetCancelRoutine(Irp, NewCancelRoutine) \
+#define IoSetCancelRoutine(Irp,NewCancelRoutine) \
((PDRIVER_CANCEL)InterlockedExchange((PULONG)&(Irp)->CancelRoutine, \
(ULONG)(NewCancelRoutine)));
-#define IoSetCompletionRoutine (Irp,Routine,Context,Success,Error,Cancel) \
+#define IoSetCompletionRoutine(Irp,Routine,Context,Success,Error,Cancel) \
{ \
PIO_STACK_LOCATION param; \
assert((Success)||(Error)||(Cancel)?(Routine)!=NULL:TRUE); \
param->Control |= SL_INVOKE_ON_CANCEL; \
}
-VOID
-STDCALL
-IoSetDeviceToVerify (
- DWORD Unknown0,
- DWORD Unknown1
- );
+VOID STDCALL
+IoSetDeviceToVerify (IN struct _ETHREAD* Thread,
+ IN PDEVICE_OBJECT DeviceObject);
VOID
STDCALL
IoSetHardErrorOrVerifyDevice (
- PIRP Irp,
- PDEVICE_OBJECT DeviceObject
+ IN PIRP Irp,
+ IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS
STDCALL
IoStopTimer (
PDEVICE_OBJECT DeviceObject
);
-NTSTATUS
-STDCALL
-IoSynchronousPageWrite (
- DWORD Unknown0,
- DWORD Unknown1,
- DWORD Unknown2,
- DWORD Unknown3,
- DWORD Unknown4
- );
-PEPROCESS
-STDCALL
-IoThreadToProcess (
- IN PETHREAD Thread
- );
+
+NTSTATUS STDCALL
+IoPageRead(PFILE_OBJECT FileObject,
+ PMDL Mdl,
+ PLARGE_INTEGER Offset,
+ PKEVENT Event,
+ PIO_STATUS_BLOCK StatusBlock);
+
+NTSTATUS STDCALL
+IoSynchronousPageWrite (PFILE_OBJECT FileObject,
+ PMDL Mdl,
+ PLARGE_INTEGER Offset,
+ PKEVENT Event,
+ PIO_STATUS_BLOCK StatusBlock);
+
+struct _EPROCESS* STDCALL IoThreadToProcess (struct _ETHREAD* Thread);
VOID
STDCALL
IoUnregisterFileSystem (
VOID
STDCALL
IoUnregisterFsRegistrationChange (
- DWORD Unknown0,
- DWORD Unknown1
+ IN PDRIVER_OBJECT DriverObject,
+ IN PFSDNOTIFICATIONPROC FSDNotificationProc
);
#endif // (_WIN32_WINNT >= 0x0400)
VOID
STDCALL
IoUnregisterShutdownNotification (
- PDEVICE_OBJECT DeviceObject
+ IN PDEVICE_OBJECT DeviceObject
);
VOID
STDCALL
ULONG SectorSize,
ULONG SectorsPerTrack,
ULONG NumberOfHeads,
- PDRIVE_LAYOUT_INFORMATION * PartitionBuffer
+ PDRIVE_LAYOUT_INFORMATION PartitionBuffer
);