14#define MAX_DEVICE_NAME 8
15#define DEVICE_CODE_SIZE 10
16#define DEVICE_PRIVATE_AREA(Driver) (Driver + sizeof(DOS_DRIVER) + DEVICE_CODE_SIZE)
18#define BOP_DRV_STRATEGY 0x42
19#define BOP_DRV_INTERRUPT 0x43
21#define DOS_DEVATTR_STDIN (1 << 0)
22#define DOS_DEVATTR_STDOUT (1 << 1)
23#define DOS_DEVATTR_NUL (1 << 2)
24#define DOS_DEVATTR_CLOCK (1 << 3)
25#define DOS_DEVATTR_CON (1 << 4)
26#define DOS_DEVATTR_OPENCLOSE (1 << 11)
27#define DOS_DEVATTR_SPECIAL (1 << 13)
28#define DOS_DEVATTR_IOCTL (1 << 14)
29#define DOS_DEVATTR_CHARACTER (1 << 15)
31#define DOS_DEVCMD_INIT 0
32#define DOS_DEVCMD_MEDIACHK 1
33#define DOS_DEVCMD_BUILDBPB 2
34#define DOS_DEVCMD_IOCTL_READ 3
35#define DOS_DEVCMD_READ 4
36#define DOS_DEVCMD_PEEK 5
37#define DOS_DEVCMD_INSTAT 6
38#define DOS_DEVCMD_FLUSH_INPUT 7
39#define DOS_DEVCMD_WRITE 8
40#define DOS_DEVCMD_WRITE_VERIFY 9
41#define DOS_DEVCMD_OUTSTAT 10
42#define DOS_DEVCMD_FLUSH_OUTPUT 11
43#define DOS_DEVCMD_IOCTL_WRITE 12
44#define DOS_DEVCMD_OPEN 13
45#define DOS_DEVCMD_CLOSE 14
46#define DOS_DEVCMD_REMOVABLE 15
47#define DOS_DEVCMD_OUTPUT_BUSY 16
49#define DOS_DEVSTAT_DONE (1 << 8)
50#define DOS_DEVSTAT_BUSY (1 << 9)
51#define DOS_DEVSTAT_ERROR (1 << 15)
53#define DOS_DEVERR_WRITE_PROTECT 0
54#define DOS_DEVERR_UNKNOWN_UNIT 1
55#define DOS_DEVERR_NOT_READY 2
56#define DOS_DEVERR_UNKNOWN_COMMAND 3
57#define DOS_DEVERR_BAD_DATA_CRC 4
58#define DOS_DEVERR_BAD_REQUEST 5
59#define DOS_DEVERR_INVALID_SEEK 6
60#define DOS_DEVERR_UNKNOWN_MEDIUM 7
61#define DOS_DEVERR_BAD_BLOCK 8
62#define DOS_DEVERR_OUT_OF_PAPER 9
63#define DOS_DEVERR_WRITE_FAULT 10
64#define DOS_DEVERR_READ_FAULT 11
65#define DOS_DEVERR_GENERAL 12
66#define DOS_DEVERR_BAD_MEDIA_CHANGE 15
_In_ ULONG _In_ ULONG _In_ ULONG Length
PDOS_DEVICE_PEEK_ROUTINE PeekRoutine
PDOS_DEVICE_GENERIC_ROUTINE OpenRoutine
PDOS_DEVICE_IO_ROUTINE WriteRoutine
PDOS_DEVICE_IO_ROUTINE ReadRoutine
PDOS_DEVICE_IO_ROUTINE IoctlWriteRoutine
PDOS_DEVICE_IO_ROUTINE IoctlReadRoutine
CHAR NameBuffer[MAX_DEVICE_NAME]
PDOS_DEVICE_GENERIC_ROUTINE CloseRoutine
PDOS_DEVICE_IO_ROUTINE OutputUntilBusyRoutine
PDOS_DEVICE_GENERIC_ROUTINE OutputStatusRoutine
PDOS_DEVICE_GENERIC_ROUTINE InputStatusRoutine
PDOS_DEVICE_GENERIC_ROUTINE FlushOutputRoutine
PDOS_DEVICE_GENERIC_ROUTINE FlushInputRoutine
OUT BYTE UnitsInitialized
OUT DWORD ReturnBreakAddress
DOS_REQUEST_HEADER Header
IN WORD StartingBlock OPTIONAL
IN BYTE MediaDescriptorByte OPTIONAL
DOS_REQUEST_HEADER Header
DOS_REQUEST_HEADER Header
DOS_REQUEST_HEADER Header
IN BYTE MediaDescriptorByte OPTIONAL
IN WORD StartingBlock OPTIONAL
OUT DWORD VolumeLabelPtr OPTIONAL
DOS_REQUEST_HEADER Header
struct _DOS_OUTPUT_BUSY_REQUEST DOS_OUTPUT_BUSY_REQUEST
PDOS_DEVICE_NODE DosGetDevice(LPCSTR DeviceName)
struct _DOS_IOCTL_RW_REQUEST DOS_IOCTL_RW_REQUEST
PDOS_DEVICE_NODE DosCreateDevice(WORD Attributes, PCHAR DeviceName)
struct _DOS_OUTPUT_BUSY_REQUEST * PDOS_OUTPUT_BUSY_REQUEST
VOID DosDeleteDevice(PDOS_DEVICE_NODE DeviceNode)
struct _DOS_INIT_REQUEST DOS_INIT_REQUEST
struct _DOS_IOCTL_RW_REQUEST * PDOS_IOCTL_RW_REQUEST
struct _DOS_PEEK_REQUEST DOS_PEEK_REQUEST
WORD(NTAPI * PDOS_DEVICE_GENERIC_ROUTINE)(PDOS_DEVICE_NODE DeviceNode)
WORD(NTAPI * PDOS_DEVICE_IO_ROUTINE)(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
PDOS_DEVICE_NODE DosCreateDeviceEx(WORD Attributes, PCHAR DeviceName, WORD PrivateDataSize)
struct _DOS_INIT_REQUEST * PDOS_INIT_REQUEST
struct _DOS_PEEK_REQUEST * PDOS_PEEK_REQUEST
struct _DOS_DRIVER DOS_DRIVER
struct _DOS_RW_REQUEST DOS_RW_REQUEST
WORD(NTAPI * PDOS_DEVICE_PEEK_ROUTINE)(PDOS_DEVICE_NODE DeviceNode, PBYTE Character)
struct _DOS_REQUEST_HEADER * PDOS_REQUEST_HEADER
struct _DOS_RW_REQUEST * PDOS_RW_REQUEST
VOID DeviceInterruptBop(VOID)
DWORD DosLoadDriver(LPCSTR DriverFile)
struct _DOS_DEVICE_NODE * PDOS_DEVICE_NODE
struct _DOS_REQUEST_HEADER DOS_REQUEST_HEADER
PDOS_DEVICE_NODE DosGetDriverNode(DWORD Driver)
VOID DeviceStrategyBop(VOID)
struct _DOS_DRIVER * PDOS_DRIVER
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_Must_inspect_result_ _In_ WDFDRIVER Driver
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_Reserved_ PVOID Reserved