freeotfe.h

来自「文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2」· C头文件 代码 · 共 784 行 · 第 1/2 页

H
784
字号
IOCTL_Std_DiskIsWritable(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


NTSTATUS
IOCTL_Std_DiskGetDriveGeometry(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


NTSTATUS
IOCTL_Std_DiskGetDriveLayout(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


#if (VER_PRODUCTBUILD >= 2600)
// Windows XP and later only
NTSTATUS
IOCTL_Std_DiskGetDriveLayoutEx(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);
#endif

#if (VER_PRODUCTBUILD >= 2600)
// Windows XP and later only
NTSTATUS
IOCTL_Std_DiskGetLengthInfo(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);
#endif


NTSTATUS
IOCTL_Std_DiskGetPartitionInfo(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


#if (VER_PRODUCTBUILD >= 2600)
// Windows XP and later only
NTSTATUS
IOCTL_Std_DiskGetPartitionInfoEx(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);
#endif


NTSTATUS
IOCTL_Std_DiskSetPartitionInfo(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


NTSTATUS
IOCTL_Std_DiskSetPartitionInfoEx(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


NTSTATUS
IOCTL_Std_DiskVerify(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


NTSTATUS
IOCTL_Std_CheckVerify(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


NTSTATUS
IOCTL_Std_MediaRemoval(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


NTSTATUS
IOCTL_Std_StorageEjectMedia(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PDEVICE_OBJECT *QueueDeviceObject
);


NTSTATUS
IOCTL_Std_CDROMReadTOC(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
);


NTSTATUS
GetDeviceDetailsHash(
    IN      char* deviceName,
    IN      GUID* supportGUID,

    OUT     MODULE_DETAILS_HASH* HashDetails
);

// Overwrite, free off and release everything that may have been
// created/obtained by a prior call to GetDeviceDetailsHash(...)
void
FreeDeviceDetailsHash(
    OUT     MODULE_DETAILS_HASH* HashDetails
);


NTSTATUS
GetDeviceDetailsCypher(
    IN      char* deviceName,
    IN      GUID* supportGUID,

    OUT     MODULE_DETAILS_CYPHER* CypherDetails
);

// Overwrite, free off and release everything that may have been
// created/obtained by a prior call to GetDeviceDetailsCypher(...)
void
FreeDeviceDetailsCypher(
    OUT     MODULE_DETAILS_CYPHER* CypherDetails
);


NTSTATUS
SynchCompletionRoutine(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PKEVENT Event
);


// Overwrite sensitive parts of the specified device's extension
NTSTATUS
OverwriteDeviceSensitive(
    IN  PDEVICE_OBJECT devObj
);


    
// Write/Read raw data to/from volume
// DoWrite - set to TRUE to write, FALSE to get
NTSTATUS
SetGetRawChar(
    IN     FREEOTFEBOOL DoWrite,
    IN     PCHAR Filename,
    IN     LARGE_INTEGER Offset,
    IN     ULONG DataLength,
    IN OUT FREEOTFEBYTE* Data
);
    
// Write/Read raw data to/from volume
// DoWrite - set to TRUE to write, FALSE to get
NTSTATUS
SetGetRawUnicode(
    IN     FREEOTFEBOOL DoWrite,
    IN     PUNICODE_STRING Filename,
    IN     LARGE_INTEGER Offset,
    IN     ULONG DataLength,
    IN OUT FREEOTFEBYTE* Data
);
    
    
// Determine the max size of a file
NTSTATUS
GetMaxSizeFile(
    IN  HANDLE FileHandle,
    OUT PLARGE_INTEGER MaxSize
);

// Determine the max size of a partition
// DeviceName - The device name of the partition
//              e.g. \Device\Harddisk1\Partition1
NTSTATUS
GetMaxSizePartition(
    IN  PUNICODE_STRING DeviceName,
    OUT PLARGE_INTEGER MaxSize
);


NTSTATUS
GenerateMAC(
    IN      MAC_ALGORITHM MACAlgorithm,
    IN      CHAR HashDeviceName[FREEOTFE_MAX_FILENAME_LENGTH],
    IN      GUID HashGUID,
    IN      CHAR CypherDeviceName[FREEOTFE_MAX_FILENAME_LENGTH],
    IN      GUID CypherGUID,
    IN      int LengthWanted,  // In bits
    IN      unsigned int KeyLength,  // In bits
    IN      unsigned char* Key,
    IN      unsigned int DataLength,  // In bits
    IN      unsigned char* Data,

    IN OUT  unsigned int* MACLength,  // In bits
    OUT     unsigned char* MAC
);


NTSTATUS
DeriveKey(
    IN      KDF_ALGORITHM KDFAlgorithm,
    IN      CHAR HashDeviceName[FREEOTFE_MAX_FILENAME_LENGTH],
    IN      GUID HashGUID,
    IN      CHAR CypherDeviceName[FREEOTFE_MAX_FILENAME_LENGTH],
    IN      GUID CypherGUID,
    IN      int Iterations,
    IN      int LengthWanted,
    IN      unsigned int PasswordLength,  // In bits
    IN      unsigned char* Password,
    IN      unsigned int SaltLength,  // In bits
    IN      unsigned char* Salt,

    IN OUT  unsigned int* DerivedKeyLength,  // In bits
    OUT     unsigned char* DerivedKey
);

// Perform an actual read from the encrypted volume
// This can be supplied with an arbitary Offset and BufferLength
NTSTATUS
ActualReadFile(
    IN      PDEVICE_OBJECT DeviceObject,
    IN      PLARGE_INTEGER Offset,
    IN      ULONG BufferLength,
    IN      FREEOTFEBYTE* Buffer
);

// Perform an actual write to the encrypted volume
// This can be supplied with an arbitary Offset and BufferLength
NTSTATUS
ActualWriteFile(
    IN      PDEVICE_OBJECT DeviceObject,
    IN      PLARGE_INTEGER Offset,
    IN      ULONG BufferLength,
    OUT     FREEOTFEBYTE* Buffer
);

#if (VER_PRODUCTBUILD >= 2600)
// Windows XP and later only
// Populate PARTITION_INFORMATION/PARTITION_INFORMATION_EX structures
NTSTATUS
PopulatePartitionInfo(
    IN PDEVICE_OBJECT DeviceObject,
    OUT PPARTITION_INFORMATION PartitionInfo,
    OUT PPARTITION_INFORMATION_EX PartitionInfoEx
);
#else
// Populate PARTITION_INFORMATION/PARTITION_INFORMATION_EX structures
NTSTATUS
PopulatePartitionInfo(
    IN PDEVICE_OBJECT DeviceObject,
    OUT PPARTITION_INFORMATION PartitionInfo
);
#endif

// Identify if emulating a CD or DVD device
FREEOTFEBOOL
EmulatingCDOrDVD(
    IN PDEVICE_OBJECT DeviceObject
);


NTSTATUS
ClientSecurityCreate(
    OUT     PSECURITY_CLIENT_CONTEXT *ClientContext  // Pointer to a pointer
);

NTSTATUS
ClientSecurityDestroy(
    IN OUT  PSECURITY_CLIENT_CONTEXT *ClientContext  // Pointer to a pointer
);


NTSTATUS
FileOpen(
    IN      PUNICODE_STRING Filename,
    IN      PSECURITY_CLIENT_CONTEXT ClientContext,
    IN      FREEOTFEBOOL ReadOnly,
    IN      FREEOTFEBOOL IntermediateBufferingOK,
    OUT     PHANDLE FileHandle,
    OUT     PIO_STATUS_BLOCK IoStatusBlock,
    OUT     PBOOLEAN GotFileAttributes,
    OUT     PFILE_BASIC_INFORMATION FileAttributes
);

NTSTATUS
FileClose(
    IN OUT  PHANDLE FileHandle,
    IN      FREEOTFEBOOL AttributesStored,
    IN      PFILE_BASIC_INFORMATION FileAttributes,
    OUT     PIO_STATUS_BLOCK IoStatusBlock
);

NTSTATUS
LDREUChar(
    IN PDEVICE_OBJECT DeviceObject,
    IN      CHAR DriveFile[FREEOTFE_MAX_FILENAME_LENGTH],
    IN      CHAR DeviceName[FREEOTFE_MAX_FILENAME_LENGTH],
    IN      BOOLEAN  Emergency
);

NTSTATUS
LDREUUnicode(
    IN PDEVICE_OBJECT DeviceObject,
    IN      PUNICODE_STRING DriveFile,
    IN      CHAR DeviceNameAnsi[FREEOTFE_MAX_FILENAME_LENGTH],  // ANSI version
    IN      PUNICODE_STRING DeviceName,
    IN      BOOLEAN  Emergency
);


NTSTATUS
SendFOTFEDiskDeviceDIOCChar(
    IN PDEVICE_OBJECT DeviceObject,
    IN      char* TgtDeviceName,
    IN      ULONG   ControlCode,
    IN      ULONG   InBufferSize,
    IN      void*   InBuffer
);

NTSTATUS
SendFOTFEDiskDeviceDIOCUnicode(
    IN PDEVICE_OBJECT DeviceObject,
    IN      PUNICODE_STRING TgtDeviceName,
    IN      ULONG   ControlCode,
    IN      ULONG   InBufferSize,
    IN      void*   InBuffer
);


NTSTATUS
AllocateUnicodeString(
     IN   CHAR* ansiString,
     OUT  PUNICODE_STRING* pUNICODEString
);

VOID
FreeUnicodeString(
    PUNICODE_STRING ptrUNICODEString
);

NTSTATUS
CreateSymlink(
    IN      CHAR Filename[FREEOTFE_MAX_FILENAME_LENGTH],
    IN      PUNICODE_STRING LinkName
);

NTSTATUS
AllocateDOSDeviceSymlinkTargetName_CharMountpoint(
    IN  char* Mountpoint,
    IN  BOOLEAN Global,
    OUT PUNICODE_STRING* SymLinkName
);

NTSTATUS
AllocateDOSDeviceSymlinkTargetName_WCHARDriveLetter(
    IN  WCHAR DriveLetter,
    IN  BOOLEAN Global,
    OUT PUNICODE_STRING* SymLinkName
);

VOID
FreeDOSDeviceSymlinkTargetName(
    PUNICODE_STRING SymLinkName
);


// This function is for testing new functionality ONLY
NTSTATUS TestCode();


// =========================================================================
// =========================================================================
// =========================================================================

#endif


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?