CORE_Driver/sector.h
#ifndef __SECTORIO_H__
#define __SECTORIO_H__
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
__declspec(dllimport) PDEVICE_OBJECT IoGetLowerDeviceObject( PDEVICE_OBJECT );
__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__ ----- */