📄 cdoproc.h
字号:
/*++
Copyright (c) 1999 - 2002 Microsoft Corporation
Module Name:
CdoProc.h
Abstract:
This is the header file defining the functions of the kernel mode
filter driver implementing the CDO sample.
Environment:
Kernel mode
--*/
//
// Functions implemented in operations.c
//
//
// Functions implemented in CdoOperations.c
//
NTSTATUS
CdoCreateControlDeviceObject(
__inout PDRIVER_OBJECT DriverObject
);
VOID
CdoDeleteControlDeviceObject(
VOID
);
//
// Functions implemented in CdoOperations.c
//
NTSTATUS
CdoMajorFunction(
__inout PDEVICE_OBJECT DeviceObject,
__inout PIRP Irp
);
NTSTATUS
CdoHandlePrivateOpen(
__in PIRP Irp
);
NTSTATUS
CdoHandlePrivateCleanup(
__in PIRP Irp
);
NTSTATUS
CdoHandlePrivateClose(
__in PIRP Irp
);
NTSTATUS
CdoHandlePrivateFsControl (
__in PDEVICE_OBJECT DeviceObject,
__in ULONG IoControlCode,
__in_bcount_opt(InputBufferLength) PVOID InputBuffer,
__in ULONG InputBufferLength,
__out_bcount_opt(OutputBufferLength) PVOID OutputBuffer,
__in ULONG OutputBufferLength,
__out PIO_STATUS_BLOCK IoStatus,
__in_opt PIRP Irp
);
BOOLEAN
CdoFastIoCheckIfPossible (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in ULONG Length,
__in BOOLEAN Wait,
__in ULONG LockKey,
__in BOOLEAN CheckForReadOperation,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoRead (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in ULONG Length,
__in BOOLEAN Wait,
__in ULONG LockKey,
__out_bcount(Length) PVOID Buffer,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoWrite (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in ULONG Length,
__in BOOLEAN Wait,
__in ULONG LockKey,
__in_bcount(Length) PVOID Buffer,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoQueryBasicInfo (
__in PFILE_OBJECT FileObject,
__in BOOLEAN Wait,
__out PFILE_BASIC_INFORMATION Buffer,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoQueryStandardInfo (
__in PFILE_OBJECT FileObject,
__in BOOLEAN Wait,
__out PFILE_STANDARD_INFORMATION Buffer,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoLock (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in PLARGE_INTEGER Length,
__in PEPROCESS ProcessId,
__in ULONG Key,
__in BOOLEAN FailImmediately,
__in BOOLEAN ExclusiveLock,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoUnlockSingle (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in PLARGE_INTEGER Length,
__in PEPROCESS ProcessId,
__in ULONG Key,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoUnlockAll (
__in PFILE_OBJECT FileObject,
__in PEPROCESS ProcessId,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoUnlockAllByKey (
__in PFILE_OBJECT FileObject,
__in PVOID ProcessId,
__in ULONG Key,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoDeviceControl (
__in PFILE_OBJECT FileObject,
__in BOOLEAN Wait,
__in_bcount_opt(InputBufferLength) PVOID InputBuffer,
__in ULONG InputBufferLength,
__out_bcount_opt(OutputBufferLength) PVOID OutputBuffer,
__in ULONG OutputBufferLength,
__in ULONG IoControlCode,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject);
BOOLEAN
CdoFastIoQueryNetworkOpenInfo (
__in PFILE_OBJECT FileObject,
__in BOOLEAN Wait,
__out PFILE_NETWORK_OPEN_INFORMATION Buffer,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoMdlRead (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in ULONG Length,
__in ULONG LockKey,
__deref_out PMDL *MdlChain,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoMdlReadComplete (
__in PFILE_OBJECT FileObject,
__in PMDL MdlChain,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoPrepareMdlWrite (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in ULONG Length,
__in ULONG LockKey,
__deref_out PMDL *MdlChain,
__out PIO_STATUS_BLOCK IoStatus,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoMdlWriteComplete (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in PMDL MdlChain,
__in PDEVICE_OBJECT DeviceObject );
BOOLEAN
CdoFastIoReadCompressed (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in ULONG Length,
__in ULONG LockKey,
__out_bcount(Length) PVOID Buffer,
__deref_out PMDL *MdlChain,
__out PIO_STATUS_BLOCK IoStatus,
__out_bcount(CompressedDataInfoLength) struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
__in ULONG CompressedDataInfoLength,
__in PDEVICE_OBJECT DeviceObject);
BOOLEAN
CdoFastIoWriteCompressed (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in ULONG Length,
__in ULONG LockKey,
__in_bcount(Length) PVOID Buffer,
__deref_out PMDL *MdlChain,
__out PIO_STATUS_BLOCK IoStatus,
__in_bcount(CompressedDataInfoLength) struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
__in ULONG CompressedDataInfoLength,
__in PDEVICE_OBJECT DeviceObject);
BOOLEAN
CdoFastIoMdlReadCompleteCompressed (
__in PFILE_OBJECT FileObject,
__in PMDL MdlChain,
__in PDEVICE_OBJECT DeviceObject);
BOOLEAN
CdoFastIoMdlWriteCompleteCompressed (
__in PFILE_OBJECT FileObject,
__in PLARGE_INTEGER FileOffset,
__in PMDL MdlChain,
__in PDEVICE_OBJECT DeviceObject);
BOOLEAN
CdoFastIoQueryOpen (
__in PIRP Irp,
__out PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
__in PDEVICE_OBJECT DeviceObject);
//
// Resource support
//
FORCEINLINE
VOID
CdoAcquireResourceExclusive (
__inout PERESOURCE Resource
)
{
ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
!ExIsResourceAcquiredSharedLite(Resource));
KeEnterCriticalRegion();
(VOID)ExAcquireResourceExclusiveLite( Resource, TRUE );
}
FORCEINLINE
VOID
CdoAcquireResourceShared (
__inout PERESOURCE Resource
)
{
ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
KeEnterCriticalRegion();
(VOID)ExAcquireResourceSharedLite( Resource, TRUE );
}
FORCEINLINE
VOID
CdoReleaseResource (
__inout PERESOURCE Resource
)
{
ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
ExIsResourceAcquiredSharedLite(Resource));
ExReleaseResourceLite(Resource);
KeLeaveCriticalRegion();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -