freeotfe.h
来自「文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2」· C头文件 代码 · 共 784 行 · 第 1/2 页
H
784 行
// Description: FreeOTFE Device Driver
// By Sarah Dean
// Email: sdean12@sdean12.org
// WWW: http://www.FreeOTFE.org/
//
// -----------------------------------------------------------------------------
//
#ifndef _FreeOTFE_H
#define _FreeOTFE_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 <ntverp.h> // Needed for VER_PRODUCTBUILD
#include <initguid.h> // Required for TEST_GUID_...
#include "FreeOTFECypherAPI.h"
#include "FreeOTFEHashAPI.h"
#include "FreeOTFEPlatform.h"
// =========================================================================
// Const definitions
// These values are in DECIMAL
#define DRIVER_VERSION_MAJOR 02
#define DRIVER_VERSION_MINOR 00
#define DRIVER_VERSION_BUILD 0000
#define DRIVER_VERSION ( \
(DRIVER_VERSION_MAJOR * 0x01000000) + \
(DRIVER_VERSION_MINOR * 0x00010000) + \
(DRIVER_VERSION_BUILD * 0x00000001) \
)
#define MAX_DEVICES 26
#define HDD_BYTES_PER_SECTOR 512
#define CD_BYTES_PER_SECTOR 2048
// These figures are used; no real reason for these *exact* numbers, except
// that they're the same defaults as used by Windows NT for SCSI devices
// when it can't get the real values from the SCSI BIOS.
// See MS Knowledgebase article Q258281 for further details
// Tracks per cylinder = the number of heads
#define TRACKS_PER_CYLINDER 64
#define SECTORS_PER_TRACK 32
// Definition used for testing purposes; dummy GUID with 0x0F as it's last byte
DEFINE_GUID(TEST_GUID_0x0F, 0x00000000L, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F);
#define CD_FRAMES_PER_SECOND 75
#define CD_FRAMES_PER_MINUTE (CD_FRAMES_PER_SECOND * 60)
// From winioctl.h
#define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
// =========================================================================
// 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
);
// Handle read IRPs
NTSTATUS
FreeOTFE_MF_DispatchRead(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Handle write IRPs
NTSTATUS
FreeOTFE_MF_DispatchWrite(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Handle flush buffers IRPs
NTSTATUS
FreeOTFE_MF_DispatchFlushBuffers(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Handle power IRPs
NTSTATUS
FreeOTFE_MF_DispatchPower(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Handle system control IRPs
NTSTATUS
FreeOTFE_MF_DispatchSystemControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
CreateMainDevice (
IN PDRIVER_OBJECT DriverObject,
OUT PDEVICE_OBJECT *DeviceObject
);
NTSTATUS
CreateDiskDevice (
IN PDRIVER_OBJECT DriverObject,
IN ULONG DeviceType,
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
);
NTSTATUS
GetNamedCharDevice(
IN PDRIVER_OBJECT DriverObject,
IN PCHAR TgtDeviceName,
OUT PDEVICE_OBJECT* DeviceObject
);
NTSTATUS
GetNamedUnicodeDevice(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING TgtDeviceName,
OUT PDEVICE_OBJECT* DeviceObject
);
// Read/write data to the specified device
NTSTATUS
ThreadReadWriteData(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp
);
// Mount the specified device
NTSTATUS
ThreadMount(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp
);
// Dismount the specified device
NTSTATUS
ThreadDismount(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_Version(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_Create(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_Destroy(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Write raw data to volume
NTSTATUS
IOCTL_FreeOTFEIOCTL_SetRaw(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Read raw data from volume
NTSTATUS
IOCTL_FreeOTFEIOCTL_GetRaw(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Derive a key
// This is implemented in the kernel mode driver as implementing it in userspace (e.g. the
// Delphi frontend) takes *far* too long to process the data due to the repeated calls to hash
// functions, etc
NTSTATUS
IOCTL_FreeOTFEIOCTL_DeriveKey(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// Generate a MAC
// Implmented in the kernel mode driver because it's required by the key derivation process
NTSTATUS
IOCTL_FreeOTFEIOCTL_GenerateMAC(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_Mount(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PDEVICE_OBJECT *QueueDeviceObject
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_DOSMountpointCreate(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_DOSMountpointDelete(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_LDREU(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_Dismount(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PDEVICE_OBJECT *QueueDeviceObject
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_GetDiskDeviceCount(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_GetDiskDeviceList(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_GetDiskDeviceStatus(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_FreeOTFEIOCTL_GetDiskDeviceMetaData(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
IOCTL_Std_DiskFormatTracks(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?