freeotfecypherdriver.h
来自「文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2」· C头文件 代码 · 共 245 行
H
245 行
// Description:
// By Sarah Dean
// Email: sdean12@sdean12.org
// WWW: http://www.FreeOTFE.org/
//
// -----------------------------------------------------------------------------
//
#ifndef _FreeOTFECypherDriver_H
#define _FreeOTFECypherDriver_H 1
// The following includes are required in order to implement Cancel-Safe
// IRP Queues
#include <ntddk.h>
//#include <wdm.h>
#include <csq.h>
#include "FreeOTFECypherAPI.h"
// =========================================================================
// Const definitions
// =========================================================================
// Type definitions
// These values are in DECIMAL
#define DRIVER_CYPHER_VERSION_MAJOR 02
#define DRIVER_CYPHER_VERSION_MINOR 00
#define DRIVER_CYPHER_VERSION_BUILD 0000
#define DRIVER_CYPHER_VERSION ( \
(DRIVER_CYPHER_VERSION_MAJOR * 0x01000000) + \
(DRIVER_CYPHER_VERSION_MINOR * 0x00010000) + \
(DRIVER_CYPHER_VERSION_BUILD * 0x00000001) \
)
typedef struct _DEVICE_EXTENSION {
// Device's name
UNICODE_STRING zzDeviceName;
// Symbolic link name
UNICODE_STRING zzSymbolicLinkName;
// ------------------------------------------------------
// Driver identification and cyphers supported
// Driver identification...
CYPHER_DRIVER_INFO DriverInfo;
// ------------------------------------------------------
// Thread/IRP queue related items follow
// Flag to signal that the thread should terminate
BOOLEAN TerminateThread;
// Required for w98; event that the thread flags to indicate it's finished
// (Credit to Walter Oney)
KEVENT ThreadTerminated;
// The device's IRP processing thread
PETHREAD ThreadObject;
// Event flagging that an IRP has been queued
KEVENT ThreadIRPQueuedEvent;
// Irps waiting to be processed are queued here
LIST_ENTRY PendingIRPQueue;
// SpinLock to protect access to the queue
KSPIN_LOCK IRPQueueLock;
IO_CSQ CancelSafeQueue;
KSEMAPHORE IRPQueueSemaphore;
// ------------------------------------------------------
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
// =========================================================================
// Function headers
// Driver entry point
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
// Driver unload
VOID
DriverUnload(
IN PDRIVER_OBJECT DriverObject
);
// Handle create IRPs
NTSTATUS
FreeOTFE_MF_DispatchCreate(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Handle close IRPs
NTSTATUS
FreeOTFE_MF_DispatchClose(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Handle device control IRPs
NTSTATUS
FreeOTFE_MF_DispatchDeviceControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
CreateDevice (
IN PDRIVER_OBJECT DriverObject,
OUT PDEVICE_OBJECT *DeviceObject
);
PDEVICE_OBJECT
DestroyDevice(
IN PDEVICE_OBJECT devObj
);
VOID
FreeOTFEThread(
IN PVOID Context
);
VOID CSQInsertIrp (
IN PIO_CSQ Csq,
IN PIRP Irp
);
VOID CSQRemoveIrp(
IN PIO_CSQ Csq,
IN PIRP Irp
);
PIRP CSQPeekNextIrp(
IN PIO_CSQ Csq,
IN PIRP Irp,
IN PVOID PeekContext
);
VOID CSQAcquireLock(
IN PIO_CSQ Csq,
OUT PKIRQL Irql
);
VOID CSQReleaseLock(
IN PIO_CSQ Csq,
IN KIRQL Irql
);
VOID CSQCompleteCanceledIrp(
IN PIO_CSQ pCsq,
IN PIRP Irp
);
// Cancel all IRPs currently on the queue
void
CancelAllQueuedIRPs(
IN PDEVICE_OBJECT DeviceObject
);
// Queue the specified IRP for the given DeviceObject
NTSTATUS
QueueIRPToThread(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// IOCTL to get driver identification
NTSTATUS
IOCTL_FreeOTFECypherIOCTL_IdentifyDriver(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// IOCTL to get cyphers supported
NTSTATUS
IOCTL_FreeOTFECypherIOCTL_IdentifySupported(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFECypherIOCTL_Encrypt(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFECypherIOCTL_Decrypt(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// IOCTL to obtain function pointers to encrypt, decrypt functions
NTSTATUS
IOCTL_FreeOTFECypherIOCTL_IntlDetails(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
GetCypherDetails(
IN GUID* CypherGUID,
IN OUT CYPHER* CypherDetails
);
// =========================================================================
// =========================================================================
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?