sector.h

来自「一个基于Windows系统( NT5.0」· C头文件 代码 · 共 81 行

H
81
字号
#ifndef  __SECTORIO_H__
#define  __SECTORIO_H__

typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;

__declspec(dllimport) NTSTATUS ObReferenceObjectByName(
        PUNICODE_STRING, 
        DWORD, 
        PACCESS_STATE, 
        ACCESS_MASK,
        POBJECT_TYPE,
        KPROCESSOR_MODE,
        PVOID,
        PVOID *Object);

__declspec(dllimport) POBJECT_TYPE* IoDriverObjectType;

__declspec(dllimport)
NTSTATUS
ObQueryNameString(
        PVOID,
        POBJECT_NAME_INFORMATION,
        ULONG Length,
        PULONG ReturnLength
        );

#pragma pack (push, 1)

typedef struct _DISK_OBJ {
	LIST_ENTRY					list;
	BOOLEAN						bIsRawDiskObj;
	BOOLEAN						bGeometryFound;
	DWORD						dwDiskOrdinal;	// If bIsRawDiskObj = TRUE Disk Number is Raw Disk Number else it is Partition Number
	ULONG						ulSectorSize;	// Sector Size on disk
	PDEVICE_OBJECT				pDiskDevObj;	// Pointer to Device Object
} DISK_OBJ, * PDISK_OBJ;

typedef struct _DISK_LOCATION {
	BOOLEAN						bIsRawDiskObj;
	DWORD						dwDiskOrdinal;
	ULONGLONG					ullSectorNum;
} DISK_LOCATION, * PDISK_LOCATION;

typedef struct _DEVICE_EXTENSION {
    LIST_ENTRY                  list_head;
    KSPIN_LOCK                  list_lock;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

#pragma pack (pop)

#define SECTOR_IO_DEVICE       0x8000

#define IOCTL_SECTOR_READ		CTL_CODE(SECTOR_IO_DEVICE, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_SECTOR_WRITE		CTL_CODE(SECTOR_IO_DEVICE, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_GET_SECTOR_SIZE	CTL_CODE(SECTOR_IO_DEVICE, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    );

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

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

NTSTATUS GetAllDiskObjects();
NTSTATUS GetGeometry(PDEVICE_OBJECT pDiskDevObj, PDISK_GEOMETRY pDiskGeo);

VOID DriverUnload(
    IN PDRIVER_OBJECT DriverObject
    );


#endif   /* ----- #ifndef __SECTORIO_H__ ----- */

⌨️ 快捷键说明

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