From 6c5abe74d33d8e4ad0d9d137dcabbee7f552998a Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 3 Mar 2010 18:01:23 +0000 Subject: [PATCH 1/1] - Move more stuff to wdm.h - Improve more Io* definitions - Fix KeInitializeDpc - IoCreateFile and everywhere related : ExtraCreateParameters -> InternalParameters - IoQueueWorkItem and everywhere related : Routine -> WorkerRoutine and pIoWorkItem -> IoWorkItem svn path=/branches/header-work/; revision=45794 --- include/ddk/wdm.h | 294 +++++++++++++++++++++++++++++++++++ include/ddk/winddk.h | 324 --------------------------------------- ntoskrnl/io/iomgr/file.c | 2 +- 3 files changed, 295 insertions(+), 325 deletions(-) diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index cdbd39b1b46..bfedc8ecd17 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -6294,8 +6294,284 @@ IoCreateDevice( IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject); +NTKERNELAPI +NTSTATUS +IoCreateFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER AllocationSize OPTIONAL, + IN ULONG FileAttributes, + IN ULONG ShareAccess, + IN ULONG Disposition, + IN ULONG CreateOptions, + IN PVOID EaBuffer OPTIONAL, + IN ULONG EaLength, + IN CREATE_FILE_TYPE CreateFileType, + IN PVOID InternalParameters OPTIONAL, + IN ULONG Options); + +NTKERNELAPI +PKEVENT +IoCreateNotificationEvent( + IN PUNICODE_STRING EventName, + OUT PHANDLE EventHandle); + +NTKERNELAPI +NTSTATUS +IoCreateSymbolicLink( + IN PUNICODE_STRING SymbolicLinkName, + IN PUNICODE_STRING DeviceName); + +NTKERNELAPI +PKEVENT +IoCreateSynchronizationEvent( + IN PUNICODE_STRING EventName, + OUT PHANDLE EventHandle); + +NTKERNELAPI +NTSTATUS +IoCreateUnprotectedSymbolicLink( + IN PUNICODE_STRING SymbolicLinkName, + IN PUNICODE_STRING DeviceName); + +NTKERNELAPI +VOID +IoDeleteDevice( + IN PDEVICE_OBJECT DeviceObject); + +NTKERNELAPI +NTSTATUS +IoDeleteSymbolicLink( + IN PUNICODE_STRING SymbolicLinkName); + +NTKERNELAPI +VOID +IoDetachDevice( + IN OUT PDEVICE_OBJECT TargetDevice); + +NTKERNELAPI +VOID +IoDisconnectInterrupt( + IN PKINTERRUPT InterruptObject); + +NTKERNELAPI +VOID +IoFreeIrp( + IN PIRP Irp); + +NTKERNELAPI +VOID +IoFreeMdl( + IN PMDL Mdl); + +NTKERNELAPI +VOID +IoFreeWorkItem( + IN PIO_WORKITEM IoWorkItem); + +NTKERNELAPI +PDEVICE_OBJECT +NTAPI +IoGetAttachedDevice( + IN PDEVICE_OBJECT DeviceObject); + +NTKERNELAPI +PDEVICE_OBJECT +IoGetAttachedDeviceReference( + IN PDEVICE_OBJECT DeviceObject); + +NTKERNELAPI +NTSTATUS +IoGetBootDiskInformation( + IN OUT PBOOTDISK_INFORMATION BootDiskInformation, + IN ULONG Size); + +NTKERNELAPI +NTSTATUS +NTAPI +IoGetDeviceInterfaceAlias( + IN PUNICODE_STRING SymbolicLinkName, + IN CONST GUID *AliasInterfaceClassGuid, + OUT PUNICODE_STRING AliasSymbolicLinkName); + +NTKERNELAPI +PEPROCESS +IoGetCurrentProcess( + VOID); + +NTKERNELAPI +NTSTATUS +NTAPI +IoGetDeviceInterfaces( + IN CONST GUID *InterfaceClassGuid, + IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, + IN ULONG Flags, + OUT PWSTR *SymbolicLinkList); + +NTKERNELAPI +NTSTATUS +IoGetDeviceObjectPointer( + IN PUNICODE_STRING ObjectName, + IN ACCESS_MASK DesiredAccess, + OUT PFILE_OBJECT *FileObject, + OUT PDEVICE_OBJECT *DeviceObject); + +NTKERNELAPI +NTSTATUS +IoGetDeviceProperty( + IN PDEVICE_OBJECT DeviceObject, + IN DEVICE_REGISTRY_PROPERTY DeviceProperty, + IN ULONG BufferLength, + OUT PVOID PropertyBuffer, + OUT PULONG ResultLength); + +NTKERNELAPI +PDMA_ADAPTER +IoGetDmaAdapter( + IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, + IN PDEVICE_DESCRIPTION DeviceDescription, + IN OUT PULONG NumberOfMapRegisters); + +NTKERNELAPI +PVOID +IoGetDriverObjectExtension( + IN PDRIVER_OBJECT DriverObject, + IN PVOID ClientIdentificationAddress); + +NTKERNELAPI +PVOID +IoGetInitialStack( + VOID); + +NTKERNELAPI +PDEVICE_OBJECT +IoGetRelatedDeviceObject( + IN PFILE_OBJECT FileObject); + +NTKERNELAPI +VOID +IoQueueWorkItem( + IN PIO_WORKITEM IoWorkItem, + IN PIO_WORKITEM_ROUTINE WorkerRoutine, + IN WORK_QUEUE_TYPE QueueType, + IN PVOID Context OPTIONAL); + +NTKERNELAPI +VOID +KeInitializeDpc( + OUT PRKDPC Dpc, + IN PKDEFERRED_ROUTINE DeferredRoutine, + IN PVOID DeferredContext OPTIONAL); + +NTKERNELAPI +VOID +IoInitializeIrp( + IN OUT PIRP Irp, + IN USHORT PacketSize, + IN CCHAR StackSize); + +NTKERNELAPI +VOID +NTAPI +IoInitializeRemoveLockEx( + IN PIO_REMOVE_LOCK Lock, + IN ULONG AllocateTag, + IN ULONG MaxLockedMinutes, + IN ULONG HighWatermark, + IN ULONG RemlockSize); + +NTKERNELAPI +NTSTATUS +NTAPI +IoInitializeTimer( + IN PDEVICE_OBJECT DeviceObject, + IN PIO_TIMER_ROUTINE TimerRoutine, + IN PVOID Context OPTIONAL); + #endif +#if (NTDDI_VERSION >= NTDDI_WINXP) + +NTKERNELAPI +NTSTATUS +IoCsqInitialize( + IN PIO_CSQ Csq, + IN PIO_CSQ_INSERT_IRP CsqInsertIrp, + IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp, + IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, + IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, + IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock, + IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); + +NTKERNELAPI +VOID +IoCsqInsertIrp( + IN PIO_CSQ Csq, + IN PIRP Irp, + IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL); + +NTKERNELAPI +PIRP +IoCsqRemoveIrp( + IN PIO_CSQ Csq, + IN PIO_CSQ_IRP_CONTEXT Context); + +NTKERNELAPI +PIRP +IoCsqRemoveNextIrp( + IN PIO_CSQ Csq, + IN PVOID PeekContext); + +NTKERNELAPI +BOOLEAN +IoForwardIrpSynchronously( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + +#define IoForwardAndCatchIrp IoForwardIrpSynchronously + +NTKERNELAPI +VOID +IoFreeErrorLogEntry( + PVOID ElEntry); + +#endif + +/* VOID + * IoInitializeRemoveLock( + * IN PIO_REMOVE_LOCK Lock, + * IN ULONG AllocateTag, + * IN ULONG MaxLockedMinutes, + * IN ULONG HighWatermark) + */ +#define IoInitializeRemoveLock( \ + Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \ + IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \ + HighWatermark, sizeof(IO_REMOVE_LOCK)) + +VOID +FORCEINLINE +IoInitializeDpcRequest( + IN PDEVICE_OBJECT DeviceObject, + IN PIO_DPC_ROUTINE DpcRoutine) +{ + KeInitializeDpc( &DeviceObject->Dpc, + (PKDEFERRED_ROUTINE) DpcRoutine, + DeviceObject ); +} + +#define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001 + +/* + * ULONG + * IoGetFunctionCodeFromCtlCode( + * IN ULONG ControlCode) + */ +#define IoGetFunctionCodeFromCtlCode(_ControlCode) \ + (((_ControlCode) >> 2) & 0x00000FFF) + /* * NTSTATUS * IoCallDriver( @@ -6343,6 +6619,24 @@ IoCopyCurrentIrpStackLocationToNext( nextIrpSp->Control = 0; } +NTKERNELAPI +VOID +IoGetStackLimits( + OUT PULONG_PTR LowLimit, + OUT PULONG_PTR HighLimit); + +FORCEINLINE +ULONG_PTR +IoGetRemainingStackSize( + VOID) +{ + ULONG_PTR End, Begin; + ULONG_PTR Result; + + IoGetStackLimits(&Begin, &End); + return ((ULONG_PTR)(&End) - Begin); +} + /****************************************************************************** * RTL Types * ******************************************************************************/ diff --git a/include/ddk/winddk.h b/include/ddk/winddk.h index b4f786635ab..379240394fa 100644 --- a/include/ddk/winddk.h +++ b/include/ddk/winddk.h @@ -2594,105 +2594,12 @@ IoCreateDisk( IN PDEVICE_OBJECT DeviceObject, IN PCREATE_DISK Disk); -NTKERNELAPI -NTSTATUS -NTAPI -IoCreateFile( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG Disposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength, - IN CREATE_FILE_TYPE CreateFileType, - IN PVOID ExtraCreateParameters OPTIONAL, - IN ULONG Options); - -NTKERNELAPI -PKEVENT -NTAPI -IoCreateNotificationEvent( - IN PUNICODE_STRING EventName, - OUT PHANDLE EventHandle); - -NTKERNELAPI -NTSTATUS -NTAPI -IoCreateSymbolicLink( - IN PUNICODE_STRING SymbolicLinkName, - IN PUNICODE_STRING DeviceName); - -NTKERNELAPI -PKEVENT -NTAPI -IoCreateSynchronizationEvent( - IN PUNICODE_STRING EventName, - OUT PHANDLE EventHandle); - -NTKERNELAPI -NTSTATUS -NTAPI -IoCreateUnprotectedSymbolicLink( - IN PUNICODE_STRING SymbolicLinkName, - IN PUNICODE_STRING DeviceName); - -NTKERNELAPI -NTSTATUS -NTAPI -IoCsqInitialize( - PIO_CSQ Csq, - IN PIO_CSQ_INSERT_IRP CsqInsertIrp, - IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp, - IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, - IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, - IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock, - IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); - -NTKERNELAPI -VOID -NTAPI -IoCsqInsertIrp( - IN PIO_CSQ Csq, - IN PIRP Irp, - IN PIO_CSQ_IRP_CONTEXT Context); - -NTKERNELAPI -PIRP -NTAPI -IoCsqRemoveIrp( - IN PIO_CSQ Csq, - IN PIO_CSQ_IRP_CONTEXT Context); - -NTKERNELAPI -PIRP -NTAPI -IoCsqRemoveNextIrp( - IN PIO_CSQ Csq, - IN PVOID PeekContext); - NTKERNELAPI VOID NTAPI IoDeleteController( IN PCONTROLLER_OBJECT ControllerObject); -NTKERNELAPI -VOID -NTAPI -IoDeleteDevice( - IN PDEVICE_OBJECT DeviceObject); - -NTKERNELAPI -NTSTATUS -NTAPI -IoDeleteSymbolicLink( - IN PUNICODE_STRING SymbolicLinkName); - /* * VOID * IoDeassignArcName( @@ -2700,252 +2607,30 @@ IoDeleteSymbolicLink( */ #define IoDeassignArcName IoDeleteSymbolicLink -NTKERNELAPI -VOID -NTAPI -IoDetachDevice( - IN OUT PDEVICE_OBJECT TargetDevice); - -NTKERNELAPI -VOID -NTAPI -IoDisconnectInterrupt( - IN PKINTERRUPT InterruptObject); - -NTKERNELAPI -BOOLEAN -NTAPI -IoForwardIrpSynchronously( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); - -#define IoForwardAndCatchIrp IoForwardIrpSynchronously - NTKERNELAPI VOID NTAPI IoFreeController( IN PCONTROLLER_OBJECT ControllerObject); -NTKERNELAPI -VOID -NTAPI -IoFreeErrorLogEntry( - PVOID ElEntry); - -NTKERNELAPI -VOID -NTAPI -IoFreeIrp( - IN PIRP Irp); - -NTKERNELAPI -VOID -NTAPI -IoFreeMdl( - IN PMDL Mdl); - -NTKERNELAPI -VOID -NTAPI -IoFreeWorkItem( - IN PIO_WORKITEM pIOWorkItem); - -NTKERNELAPI -PDEVICE_OBJECT -NTAPI -IoGetAttachedDevice( - IN PDEVICE_OBJECT DeviceObject); - -NTKERNELAPI -PDEVICE_OBJECT -NTAPI -IoGetAttachedDeviceReference( - IN PDEVICE_OBJECT DeviceObject); - -NTKERNELAPI -NTSTATUS -NTAPI -IoGetBootDiskInformation( - IN OUT PBOOTDISK_INFORMATION BootDiskInformation, - IN ULONG Size); - NTKERNELAPI PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation( VOID); -NTKERNELAPI -PEPROCESS -NTAPI -IoGetCurrentProcess( - VOID); - -NTKERNELAPI -NTSTATUS -NTAPI -IoGetDeviceInterfaceAlias( - IN PUNICODE_STRING SymbolicLinkName, - IN CONST GUID *AliasInterfaceClassGuid, - OUT PUNICODE_STRING AliasSymbolicLinkName); - -#define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001 - -NTKERNELAPI -NTSTATUS -NTAPI -IoGetDeviceInterfaces( - IN CONST GUID *InterfaceClassGuid, - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN ULONG Flags, - OUT PWSTR *SymbolicLinkList); - -NTKERNELAPI -NTSTATUS -NTAPI -IoGetDeviceObjectPointer( - IN PUNICODE_STRING ObjectName, - IN ACCESS_MASK DesiredAccess, - OUT PFILE_OBJECT *FileObject, - OUT PDEVICE_OBJECT *DeviceObject); - -NTKERNELAPI -NTSTATUS -NTAPI -IoGetDeviceProperty( - IN PDEVICE_OBJECT DeviceObject, - IN DEVICE_REGISTRY_PROPERTY DeviceProperty, - IN ULONG BufferLength, - OUT PVOID PropertyBuffer, - OUT PULONG ResultLength); - NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetDeviceToVerify( IN PETHREAD Thread); -NTKERNELAPI -PDMA_ADAPTER -NTAPI -IoGetDmaAdapter( - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PDEVICE_DESCRIPTION DeviceDescription, - IN OUT PULONG NumberOfMapRegisters); - -NTKERNELAPI -PVOID -NTAPI -IoGetDriverObjectExtension( - IN PDRIVER_OBJECT DriverObject, - IN PVOID ClientIdentificationAddress); - NTKERNELAPI PGENERIC_MAPPING NTAPI IoGetFileObjectGenericMapping( VOID); -/* - * ULONG - * IoGetFunctionCodeFromCtlCode( - * IN ULONG ControlCode) - */ -#define IoGetFunctionCodeFromCtlCode(_ControlCode) \ - (((_ControlCode) >> 2) & 0x00000FFF) - -NTKERNELAPI -PVOID -NTAPI -IoGetInitialStack( - VOID); - -NTKERNELAPI -PDEVICE_OBJECT -NTAPI -IoGetRelatedDeviceObject( - IN PFILE_OBJECT FileObject); - -NTKERNELAPI -VOID -NTAPI -IoGetStackLimits( - OUT PULONG_PTR LowLimit, - OUT PULONG_PTR HighLimit); - -FORCEINLINE -ULONG_PTR -IoGetRemainingStackSize( - VOID -) -{ - ULONG_PTR End, Begin; - ULONG_PTR Result; - - IoGetStackLimits(&Begin, &End); - Result = (ULONG_PTR)(&End) - Begin; - return Result; -} - -NTKERNELAPI -VOID -NTAPI -KeInitializeDpc( - IN PRKDPC Dpc, - IN PKDEFERRED_ROUTINE DeferredRoutine, - IN PVOID DeferredContext); - -/* - * VOID - * IoInitializeDpcRequest( - * IN PDEVICE_OBJECT DeviceObject, - * IN PIO_DPC_ROUTINE DpcRoutine) - */ -#define IoInitializeDpcRequest(_DeviceObject, \ - _DpcRoutine) \ - KeInitializeDpc(&(_DeviceObject)->Dpc, \ - (PKDEFERRED_ROUTINE) (_DpcRoutine), \ - _DeviceObject) - -NTKERNELAPI -VOID -NTAPI -IoInitializeIrp( - IN OUT PIRP Irp, - IN USHORT PacketSize, - IN CCHAR StackSize); - -NTKERNELAPI -VOID -NTAPI -IoInitializeRemoveLockEx( - IN PIO_REMOVE_LOCK Lock, - IN ULONG AllocateTag, - IN ULONG MaxLockedMinutes, - IN ULONG HighWatermark, - IN ULONG RemlockSize); - -/* VOID - * IoInitializeRemoveLock( - * IN PIO_REMOVE_LOCK Lock, - * IN ULONG AllocateTag, - * IN ULONG MaxLockedMinutes, - * IN ULONG HighWatermark) - */ -#define IoInitializeRemoveLock( \ - Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \ - IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \ - HighWatermark, sizeof(IO_REMOVE_LOCK)) - -NTKERNELAPI -NTSTATUS -NTAPI -IoInitializeTimer( - IN PDEVICE_OBJECT DeviceObject, - IN PIO_TIMER_ROUTINE TimerRoutine, - IN PVOID Context); - NTKERNELAPI VOID NTAPI @@ -3035,15 +2720,6 @@ IoQueryDeviceDescription( IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, IN PVOID Context); -NTKERNELAPI -VOID -NTAPI -IoQueueWorkItem( - IN PIO_WORKITEM pIOWorkItem, - IN PIO_WORKITEM_ROUTINE Routine, - IN WORK_QUEUE_TYPE QueueType, - IN PVOID Context); - NTKERNELAPI VOID NTAPI diff --git a/ntoskrnl/io/iomgr/file.c b/ntoskrnl/io/iomgr/file.c index b6a63d9af66..444ecea8cba 100644 --- a/ntoskrnl/io/iomgr/file.c +++ b/ntoskrnl/io/iomgr/file.c @@ -1655,7 +1655,7 @@ IoCreateFile(OUT PHANDLE FileHandle, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength, IN CREATE_FILE_TYPE CreateFileType, - IN PVOID ExtraCreateParameters OPTIONAL, + IN PVOID InternalParameters OPTIONAL, IN ULONG Options) { KPROCESSOR_MODE AccessMode; -- 2.17.1