ReactOS  0.4.14-dev-368-gfa26425
device.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _DOS_DEVICE_NODE
 
struct  _DOS_DRIVER
 
struct  _DOS_REQUEST_HEADER
 
struct  _DOS_INIT_REQUEST
 
struct  _DOS_IOCTL_RW_REQUEST
 
struct  _DOS_RW_REQUEST
 
struct  _DOS_PEEK_REQUEST
 
struct  _DOS_OUTPUT_BUSY_REQUEST
 

Macros

#define MAX_DEVICE_NAME   8
 
#define DEVICE_CODE_SIZE   10
 
#define DEVICE_PRIVATE_AREA(Driver)   (Driver + sizeof(DOS_DRIVER) + DEVICE_CODE_SIZE)
 
#define BOP_DRV_STRATEGY   0x42
 
#define BOP_DRV_INTERRUPT   0x43
 
#define DOS_DEVATTR_STDIN   (1 << 0)
 
#define DOS_DEVATTR_STDOUT   (1 << 1)
 
#define DOS_DEVATTR_NUL   (1 << 2)
 
#define DOS_DEVATTR_CLOCK   (1 << 3)
 
#define DOS_DEVATTR_CON   (1 << 4)
 
#define DOS_DEVATTR_OPENCLOSE   (1 << 11)
 
#define DOS_DEVATTR_SPECIAL   (1 << 13)
 
#define DOS_DEVATTR_IOCTL   (1 << 14)
 
#define DOS_DEVATTR_CHARACTER   (1 << 15)
 
#define DOS_DEVCMD_INIT   0
 
#define DOS_DEVCMD_MEDIACHK   1
 
#define DOS_DEVCMD_BUILDBPB   2
 
#define DOS_DEVCMD_IOCTL_READ   3
 
#define DOS_DEVCMD_READ   4
 
#define DOS_DEVCMD_PEEK   5
 
#define DOS_DEVCMD_INSTAT   6
 
#define DOS_DEVCMD_FLUSH_INPUT   7
 
#define DOS_DEVCMD_WRITE   8
 
#define DOS_DEVCMD_WRITE_VERIFY   9
 
#define DOS_DEVCMD_OUTSTAT   10
 
#define DOS_DEVCMD_FLUSH_OUTPUT   11
 
#define DOS_DEVCMD_IOCTL_WRITE   12
 
#define DOS_DEVCMD_OPEN   13
 
#define DOS_DEVCMD_CLOSE   14
 
#define DOS_DEVCMD_REMOVABLE   15
 
#define DOS_DEVCMD_OUTPUT_BUSY   16
 
#define DOS_DEVSTAT_DONE   (1 << 8)
 
#define DOS_DEVSTAT_BUSY   (1 << 9)
 
#define DOS_DEVSTAT_ERROR   (1 << 15)
 
#define DOS_DEVERR_WRITE_PROTECT   0
 
#define DOS_DEVERR_UNKNOWN_UNIT   1
 
#define DOS_DEVERR_NOT_READY   2
 
#define DOS_DEVERR_UNKNOWN_COMMAND   3
 
#define DOS_DEVERR_BAD_DATA_CRC   4
 
#define DOS_DEVERR_BAD_REQUEST   5
 
#define DOS_DEVERR_INVALID_SEEK   6
 
#define DOS_DEVERR_UNKNOWN_MEDIUM   7
 
#define DOS_DEVERR_BAD_BLOCK   8
 
#define DOS_DEVERR_OUT_OF_PAPER   9
 
#define DOS_DEVERR_WRITE_FAULT   10
 
#define DOS_DEVERR_READ_FAULT   11
 
#define DOS_DEVERR_GENERAL   12
 
#define DOS_DEVERR_BAD_MEDIA_CHANGE   15
 

Typedefs

typedef struct _DOS_DEVICE_NODE DOS_DEVICE_NODE
 
typedef struct _DOS_DEVICE_NODEPDOS_DEVICE_NODE
 
typedef WORD(NTAPIPDOS_DEVICE_GENERIC_ROUTINE) (PDOS_DEVICE_NODE DeviceNode)
 
typedef WORD(NTAPIPDOS_DEVICE_IO_ROUTINE) (PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
 
typedef WORD(NTAPIPDOS_DEVICE_PEEK_ROUTINE) (PDOS_DEVICE_NODE DeviceNode, PBYTE Character)
 
typedef struct _DOS_DRIVER DOS_DRIVER
 
typedef struct _DOS_DRIVERPDOS_DRIVER
 
typedef struct _DOS_REQUEST_HEADER DOS_REQUEST_HEADER
 
typedef struct _DOS_REQUEST_HEADERPDOS_REQUEST_HEADER
 
typedef struct _DOS_INIT_REQUEST DOS_INIT_REQUEST
 
typedef struct _DOS_INIT_REQUESTPDOS_INIT_REQUEST
 
typedef struct _DOS_IOCTL_RW_REQUEST DOS_IOCTL_RW_REQUEST
 
typedef struct _DOS_IOCTL_RW_REQUESTPDOS_IOCTL_RW_REQUEST
 
typedef struct _DOS_RW_REQUEST DOS_RW_REQUEST
 
typedef struct _DOS_RW_REQUESTPDOS_RW_REQUEST
 
typedef struct _DOS_PEEK_REQUEST DOS_PEEK_REQUEST
 
typedef struct _DOS_PEEK_REQUESTPDOS_PEEK_REQUEST
 
typedef struct _DOS_OUTPUT_BUSY_REQUEST DOS_OUTPUT_BUSY_REQUEST
 
typedef struct _DOS_OUTPUT_BUSY_REQUESTPDOS_OUTPUT_BUSY_REQUEST
 

Functions

 C_ASSERT (sizeof(DOS_DRIVER)==0x12)
 
PDOS_DEVICE_NODE DosGetDriverNode (DWORD Driver)
 
PDOS_DEVICE_NODE DosGetDevice (LPCSTR DeviceName)
 
PDOS_DEVICE_NODE DosCreateDevice (WORD Attributes, PCHAR DeviceName)
 
PDOS_DEVICE_NODE DosCreateDeviceEx (WORD Attributes, PCHAR DeviceName, WORD PrivateDataSize)
 
VOID DosDeleteDevice (PDOS_DEVICE_NODE DeviceNode)
 
VOID DeviceStrategyBop (VOID)
 
VOID DeviceInterruptBop (VOID)
 
DWORD DosLoadDriver (LPCSTR DriverFile)
 

Macro Definition Documentation

◆ BOP_DRV_INTERRUPT

#define BOP_DRV_INTERRUPT   0x43

Definition at line 19 of file device.h.

◆ BOP_DRV_STRATEGY

#define BOP_DRV_STRATEGY   0x42

Definition at line 18 of file device.h.

◆ DEVICE_CODE_SIZE

#define DEVICE_CODE_SIZE   10

Definition at line 15 of file device.h.

◆ DEVICE_PRIVATE_AREA

#define DEVICE_PRIVATE_AREA (   Driver)    (Driver + sizeof(DOS_DRIVER) + DEVICE_CODE_SIZE)

Definition at line 16 of file device.h.

◆ DOS_DEVATTR_CHARACTER

#define DOS_DEVATTR_CHARACTER   (1 << 15)

Definition at line 29 of file device.h.

◆ DOS_DEVATTR_CLOCK

#define DOS_DEVATTR_CLOCK   (1 << 3)

Definition at line 24 of file device.h.

◆ DOS_DEVATTR_CON

#define DOS_DEVATTR_CON   (1 << 4)

Definition at line 25 of file device.h.

◆ DOS_DEVATTR_IOCTL

#define DOS_DEVATTR_IOCTL   (1 << 14)

Definition at line 28 of file device.h.

◆ DOS_DEVATTR_NUL

#define DOS_DEVATTR_NUL   (1 << 2)

Definition at line 23 of file device.h.

◆ DOS_DEVATTR_OPENCLOSE

#define DOS_DEVATTR_OPENCLOSE   (1 << 11)

Definition at line 26 of file device.h.

◆ DOS_DEVATTR_SPECIAL

#define DOS_DEVATTR_SPECIAL   (1 << 13)

Definition at line 27 of file device.h.

◆ DOS_DEVATTR_STDIN

#define DOS_DEVATTR_STDIN   (1 << 0)

Definition at line 21 of file device.h.

◆ DOS_DEVATTR_STDOUT

#define DOS_DEVATTR_STDOUT   (1 << 1)

Definition at line 22 of file device.h.

◆ DOS_DEVCMD_BUILDBPB

#define DOS_DEVCMD_BUILDBPB   2

Definition at line 33 of file device.h.

◆ DOS_DEVCMD_CLOSE

#define DOS_DEVCMD_CLOSE   14

Definition at line 45 of file device.h.

◆ DOS_DEVCMD_FLUSH_INPUT

#define DOS_DEVCMD_FLUSH_INPUT   7

Definition at line 38 of file device.h.

◆ DOS_DEVCMD_FLUSH_OUTPUT

#define DOS_DEVCMD_FLUSH_OUTPUT   11

Definition at line 42 of file device.h.

◆ DOS_DEVCMD_INIT

#define DOS_DEVCMD_INIT   0

Definition at line 31 of file device.h.

◆ DOS_DEVCMD_INSTAT

#define DOS_DEVCMD_INSTAT   6

Definition at line 37 of file device.h.

◆ DOS_DEVCMD_IOCTL_READ

#define DOS_DEVCMD_IOCTL_READ   3

Definition at line 34 of file device.h.

◆ DOS_DEVCMD_IOCTL_WRITE

#define DOS_DEVCMD_IOCTL_WRITE   12

Definition at line 43 of file device.h.

◆ DOS_DEVCMD_MEDIACHK

#define DOS_DEVCMD_MEDIACHK   1

Definition at line 32 of file device.h.

◆ DOS_DEVCMD_OPEN

#define DOS_DEVCMD_OPEN   13

Definition at line 44 of file device.h.

◆ DOS_DEVCMD_OUTPUT_BUSY

#define DOS_DEVCMD_OUTPUT_BUSY   16

Definition at line 47 of file device.h.

◆ DOS_DEVCMD_OUTSTAT

#define DOS_DEVCMD_OUTSTAT   10

Definition at line 41 of file device.h.

◆ DOS_DEVCMD_PEEK

#define DOS_DEVCMD_PEEK   5

Definition at line 36 of file device.h.

◆ DOS_DEVCMD_READ

#define DOS_DEVCMD_READ   4

Definition at line 35 of file device.h.

◆ DOS_DEVCMD_REMOVABLE

#define DOS_DEVCMD_REMOVABLE   15

Definition at line 46 of file device.h.

◆ DOS_DEVCMD_WRITE

#define DOS_DEVCMD_WRITE   8

Definition at line 39 of file device.h.

◆ DOS_DEVCMD_WRITE_VERIFY

#define DOS_DEVCMD_WRITE_VERIFY   9

Definition at line 40 of file device.h.

◆ DOS_DEVERR_BAD_BLOCK

#define DOS_DEVERR_BAD_BLOCK   8

Definition at line 61 of file device.h.

◆ DOS_DEVERR_BAD_DATA_CRC

#define DOS_DEVERR_BAD_DATA_CRC   4

Definition at line 57 of file device.h.

◆ DOS_DEVERR_BAD_MEDIA_CHANGE

#define DOS_DEVERR_BAD_MEDIA_CHANGE   15

Definition at line 66 of file device.h.

◆ DOS_DEVERR_BAD_REQUEST

#define DOS_DEVERR_BAD_REQUEST   5

Definition at line 58 of file device.h.

◆ DOS_DEVERR_GENERAL

#define DOS_DEVERR_GENERAL   12

Definition at line 65 of file device.h.

◆ DOS_DEVERR_INVALID_SEEK

#define DOS_DEVERR_INVALID_SEEK   6

Definition at line 59 of file device.h.

◆ DOS_DEVERR_NOT_READY

#define DOS_DEVERR_NOT_READY   2

Definition at line 55 of file device.h.

◆ DOS_DEVERR_OUT_OF_PAPER

#define DOS_DEVERR_OUT_OF_PAPER   9

Definition at line 62 of file device.h.

◆ DOS_DEVERR_READ_FAULT

#define DOS_DEVERR_READ_FAULT   11

Definition at line 64 of file device.h.

◆ DOS_DEVERR_UNKNOWN_COMMAND

#define DOS_DEVERR_UNKNOWN_COMMAND   3

Definition at line 56 of file device.h.

◆ DOS_DEVERR_UNKNOWN_MEDIUM

#define DOS_DEVERR_UNKNOWN_MEDIUM   7

Definition at line 60 of file device.h.

◆ DOS_DEVERR_UNKNOWN_UNIT

#define DOS_DEVERR_UNKNOWN_UNIT   1

Definition at line 54 of file device.h.

◆ DOS_DEVERR_WRITE_FAULT

#define DOS_DEVERR_WRITE_FAULT   10

Definition at line 63 of file device.h.

◆ DOS_DEVERR_WRITE_PROTECT

#define DOS_DEVERR_WRITE_PROTECT   0

Definition at line 53 of file device.h.

◆ DOS_DEVSTAT_BUSY

#define DOS_DEVSTAT_BUSY   (1 << 9)

Definition at line 50 of file device.h.

◆ DOS_DEVSTAT_DONE

#define DOS_DEVSTAT_DONE   (1 << 8)

Definition at line 49 of file device.h.

◆ DOS_DEVSTAT_ERROR

#define DOS_DEVSTAT_ERROR   (1 << 15)

Definition at line 51 of file device.h.

◆ MAX_DEVICE_NAME

#define MAX_DEVICE_NAME   8

Definition at line 14 of file device.h.

Typedef Documentation

◆ DOS_DEVICE_NODE

Definition at line 68 of file device.h.

◆ DOS_DRIVER

◆ DOS_INIT_REQUEST

◆ DOS_IOCTL_RW_REQUEST

◆ DOS_OUTPUT_BUSY_REQUEST

◆ DOS_PEEK_REQUEST

◆ DOS_REQUEST_HEADER

◆ DOS_RW_REQUEST

◆ PDOS_DEVICE_GENERIC_ROUTINE

typedef WORD(NTAPI * PDOS_DEVICE_GENERIC_ROUTINE) (PDOS_DEVICE_NODE DeviceNode)

Definition at line 70 of file device.h.

◆ PDOS_DEVICE_IO_ROUTINE

typedef WORD(NTAPI * PDOS_DEVICE_IO_ROUTINE) (PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)

Definition at line 73 of file device.h.

◆ PDOS_DEVICE_NODE

Definition at line 68 of file device.h.

◆ PDOS_DEVICE_PEEK_ROUTINE

typedef WORD(NTAPI * PDOS_DEVICE_PEEK_ROUTINE) (PDOS_DEVICE_NODE DeviceNode, PBYTE Character)

Definition at line 80 of file device.h.

◆ PDOS_DRIVER

◆ PDOS_INIT_REQUEST

◆ PDOS_IOCTL_RW_REQUEST

◆ PDOS_OUTPUT_BUSY_REQUEST

◆ PDOS_PEEK_REQUEST

◆ PDOS_REQUEST_HEADER

◆ PDOS_RW_REQUEST

Function Documentation

◆ C_ASSERT()

C_ASSERT ( sizeof(DOS_DRIVER = =0x12)

◆ DeviceInterruptBop()

VOID DeviceInterruptBop ( VOID  )

Definition at line 436 of file device.c.

437 {
438  PLIST_ENTRY i;
440  DWORD DriverAddress = (getCS() << 4) + getIP() - sizeof(DOS_DRIVER) - 9;
441 
442  /* Get the device node for this driver */
443  for (i = DeviceList.Flink; i != &DeviceList; i = i->Flink)
444  {
446  if (TO_LINEAR(HIWORD(Node->Driver), LOWORD(Node->Driver)) == DriverAddress) break;
447  }
448 
449  if (i == &DeviceList)
450  {
451  DPRINT1("Device interrupt BOP from an unknown location.\n");
452  return;
453  }
454 
455  switch (DeviceRequest->CommandCode)
456  {
458  {
460 
461  DeviceRequest->Status = Node->IoctlReadRoutine(
462  Node,
463  Request->BufferPointer,
464  &Request->Length
465  );
466 
467  break;
468  }
469 
470  case DOS_DEVCMD_READ:
471  {
473 
474  DeviceRequest->Status = Node->ReadRoutine(
475  Node,
476  Request->BufferPointer,
477  &Request->Length
478  );
479 
480  break;
481  }
482 
483  case DOS_DEVCMD_PEEK:
484  {
486  DeviceRequest->Status = Node->PeekRoutine(Node, &Request->Character);
487  break;
488  }
489 
490  case DOS_DEVCMD_INSTAT:
491  {
492  DeviceRequest->Status = Node->InputStatusRoutine(Node);
493  break;
494  }
495 
497  {
498  DeviceRequest->Status = Node->FlushInputRoutine(Node);
499  break;
500  }
501 
503  {
505 
506  DeviceRequest->Status = Node->IoctlWriteRoutine(
507  Node,
508  Request->BufferPointer,
509  &Request->Length
510  );
511 
512  break;
513  }
514 
515  case DOS_DEVCMD_WRITE:
516  {
518 
519  DeviceRequest->Status = Node->WriteRoutine(Node,
520  Request->BufferPointer,
521  &Request->Length
522  );
523 
524  break;
525  }
526 
527  case DOS_DEVCMD_OUTSTAT:
528  {
529  DeviceRequest->Status = Node->OutputStatusRoutine(Node);
530  break;
531  }
532 
534  {
535  DeviceRequest->Status = Node->FlushOutputRoutine(Node);
536  break;
537  }
538 
539  case DOS_DEVCMD_OPEN:
540  {
541  DeviceRequest->Status = Node->OpenRoutine(Node);
542  break;
543  }
544 
545  case DOS_DEVCMD_CLOSE:
546  {
547  DeviceRequest->Status = Node->CloseRoutine(Node);
548  break;
549  }
550 
552  {
554 
555  DeviceRequest->Status = Node->OutputUntilBusyRoutine(
556  Node,
557  Request->BufferPointer,
558  &Request->Length
559  );
560 
561  break;
562  }
563 
564  default:
565  {
566  DPRINT1("Unknown device command code: %u\n", DeviceRequest->CommandCode);
567  }
568  }
569 }
#define DOS_DEVCMD_PEEK
Definition: device.h:36
struct _DOS_OUTPUT_BUSY_REQUEST * PDOS_OUTPUT_BUSY_REQUEST
static PDOS_REQUEST_HEADER DeviceRequest
Definition: device.c:45
#define DOS_DEVCMD_OUTSTAT
Definition: device.h:41
#define DOS_DEVCMD_READ
Definition: device.h:35
#define DOS_DEVCMD_WRITE
Definition: device.h:39
struct _DOS_RW_REQUEST * PDOS_RW_REQUEST
#define DOS_DEVCMD_INSTAT
Definition: device.h:37
_In_ NDIS_HANDLE _In_ PNDIS_REQUEST Request
Definition: ndis.h:5173
struct _DOS_DRIVER DOS_DRIVER
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
union node Node
Definition: types.h:1255
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
struct _DOS_IOCTL_RW_REQUEST * PDOS_IOCTL_RW_REQUEST
#define DOS_DEVCMD_OUTPUT_BUSY
Definition: device.h:47
#define DOS_DEVCMD_CLOSE
Definition: device.h:45
USHORT WINAPI getIP(VOID)
Definition: registers.c:464
unsigned long DWORD
Definition: ntddk_ex.h:95
IN BYTE CommandCode
Definition: device.h:132
OUT WORD Status
Definition: device.h:133
#define TO_LINEAR(seg, off)
Definition: emulator.h:22
Definition: typedefs.h:117
#define DOS_DEVCMD_IOCTL_READ
Definition: device.h:34
struct _DOS_PEEK_REQUEST * PDOS_PEEK_REQUEST
#define DOS_DEVCMD_FLUSH_OUTPUT
Definition: device.h:42
#define DOS_DEVCMD_IOCTL_WRITE
Definition: device.h:43
#define DPRINT1
Definition: precomp.h:8
#define DOS_DEVCMD_FLUSH_INPUT
Definition: device.h:38
#define HIWORD(l)
Definition: typedefs.h:246
#define DOS_DEVCMD_OPEN
Definition: device.h:44
USHORT WINAPI getCS(VOID)
Definition: registers.c:480
#define LOWORD(l)
Definition: pedump.c:82
base of all file and directory entries
Definition: entries.h:82
static LIST_ENTRY DeviceList
Definition: device.c:44
Definition: dlist.c:348

Referenced by DosSystemBop().

◆ DeviceStrategyBop()

VOID DeviceStrategyBop ( VOID  )

Definition at line 430 of file device.c.

431 {
432  /* Save ES:BX */
434 }
USHORT WINAPI getBX(VOID)
Definition: registers.c:170
static PDOS_REQUEST_HEADER DeviceRequest
Definition: device.c:45
#define SEG_OFF_TO_PTR(seg, off)
Definition: emulator.h:28
struct _DOS_REQUEST_HEADER * PDOS_REQUEST_HEADER
USHORT WINAPI getES(VOID)
Definition: registers.c:522

Referenced by DosSystemBop().

◆ DosCreateDevice()

PDOS_DEVICE_NODE DosCreateDevice ( WORD  Attributes,
PCHAR  DeviceName 
)

Definition at line 413 of file device.c.

414 {
415  /* Call the extended API */
417 }
WCHAR DeviceName[]
Definition: adapter.cpp:21
PDOS_DEVICE_NODE DosCreateDeviceEx(WORD Attributes, PCHAR DeviceName, WORD PrivateDataSize)
Definition: device.c:361
_Must_inspect_result_ _In_ USHORT _In_ PHIDP_PREPARSED_DATA _Out_writes_to_ LengthAttributes PHIDP_EXTENDED_ATTRIBUTES Attributes
Definition: hidpi.h:348

Referenced by ConDrvInitialize().

◆ DosCreateDeviceEx()

PDOS_DEVICE_NODE DosCreateDeviceEx ( WORD  Attributes,
PCHAR  DeviceName,
WORD  PrivateDataSize 
)

Definition at line 361 of file device.c.

362 {
363  BYTE i;
364  WORD Segment;
365  PDOS_DRIVER DriverHeader;
367 
368  /* Make sure this is a character device */
370  {
371  DPRINT1("ERROR: Block devices are not supported.\n");
372  return NULL;
373  }
374 
375  /* Create a driver header for this device */
376  Segment = DosAllocateMemory(sizeof(DOS_DRIVER) + DEVICE_CODE_SIZE + PrivateDataSize, NULL);
377  if (Segment == 0) return NULL;
378 
379  /* Fill the header with data */
380  DriverHeader = SEG_OFF_TO_PTR(Segment, 0);
381  DriverHeader->Link = 0xFFFFFFFF;
382  DriverHeader->DeviceAttributes = Attributes;
383  DriverHeader->StrategyRoutine = sizeof(DOS_DRIVER);
384  DriverHeader->InterruptRoutine = sizeof(DOS_DRIVER) + sizeof(StrategyRoutine);
385 
386  RtlFillMemory(DriverHeader->DeviceName, MAX_DEVICE_NAME, ' ');
387  for (i = 0; i < MAX_DEVICE_NAME; i++)
388  {
389  if (DeviceName[i] == '\0' || DeviceName[i] == ' ') break;
390  DriverHeader->DeviceName[i] = DeviceName[i];
391  }
392 
393  /* Write the routines */
396  sizeof(StrategyRoutine));
399  sizeof(InterruptRoutine));
400 
401  /* Create the node */
403  if (Node == NULL)
404  {
406  return NULL;
407  }
408 
409  DosAddDriver(Node->Driver);
410  return Node;
411 }
DWORD Link
Definition: device.h:110
static const BYTE InterruptRoutine[]
Definition: device.c:34
CHAR DeviceName[MAX_DEVICE_NAME]
Definition: device.h:117
static PDOS_DEVICE_NODE DosCreateDeviceNode(DWORD Driver)
Definition: device.c:275
BOOLEAN DosFreeMemory(WORD BlockData)
Definition: memory.c:418
WCHAR DeviceName[]
Definition: adapter.cpp:21
#define SEG_OFF_TO_PTR(seg, off)
Definition: emulator.h:28
static VOID DosAddDriver(DWORD Driver)
Definition: device.c:228
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:263
struct _DOS_DRIVER DOS_DRIVER
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
union node Node
Definition: types.h:1255
WORD InterruptRoutine
Definition: device.h:113
#define MAKELONG(a, b)
Definition: typedefs.h:248
smooth NULL
Definition: ftsmooth.c:416
WORD DosAllocateMemory(WORD Size, WORD *MaxAvailable)
Definition: memory.c:136
_Inout_ PVOID Segment
Definition: exfuncs.h:893
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned char BYTE
Definition: mem.h:68
WORD DeviceAttributes
Definition: device.h:111
#define DOS_DEVATTR_CHARACTER
Definition: device.h:29
_Must_inspect_result_ _In_ USHORT _In_ PHIDP_PREPARSED_DATA _Out_writes_to_ LengthAttributes PHIDP_EXTENDED_ATTRIBUTES Attributes
Definition: hidpi.h:348
#define DPRINT1
Definition: precomp.h:8
#define DEVICE_CODE_SIZE
Definition: device.h:15
#define MAX_DEVICE_NAME
Definition: fdc.h:14
WORD StrategyRoutine
Definition: device.h:112
#define RtlFillMemory(Dest, Length, Fill)
Definition: winternl.h:593
static const BYTE StrategyRoutine[]
Definition: device.c:26
Definition: dlist.c:348

Referenced by DosCreateDevice(), EmsDrvInitialize(), and XmsInitialize().

◆ DosDeleteDevice()

VOID DosDeleteDevice ( PDOS_DEVICE_NODE  DeviceNode)

Definition at line 419 of file device.c.

420 {
421  DosRemoveDriver(DeviceNode->Driver);
422 
423  ASSERT(LOWORD(DeviceNode->Driver) == 0);
424  DosFreeMemory(HIWORD(DeviceNode->Driver));
425 
426  RemoveEntryList(&DeviceNode->Entry);
427  RtlFreeHeap(RtlGetProcessHeap(), 0, DeviceNode);
428 }
static VOID DosRemoveDriver(DWORD Driver)
Definition: device.c:256
BOOLEAN DosFreeMemory(WORD BlockData)
Definition: memory.c:418
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:606
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
Definition: rtlfuncs.h:105
Definition: Node.h:9
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define HIWORD(l)
Definition: typedefs.h:246
#define LOWORD(l)
Definition: pedump.c:82

Referenced by ConDrvCleanup(), EmsDrvCleanup(), and XmsCleanup().

◆ DosGetDevice()

PDOS_DEVICE_NODE DosGetDevice ( LPCSTR  DeviceName)

Definition at line 342 of file device.c.

343 {
345  ANSI_STRING DeviceNameString;
346 
347  RtlInitAnsiString(&DeviceNameString, DeviceName);
348 
349  while (LOWORD(CurrentDriver) != 0xFFFF)
350  {
351  PDOS_DEVICE_NODE Node = DosGetDriverNode(CurrentDriver);
352  PDOS_DRIVER DriverHeader = (PDOS_DRIVER)FAR_POINTER(CurrentDriver);
353 
354  if (RtlEqualString(&Node->Name, &DeviceNameString, TRUE)) return Node;
355  CurrentDriver = DriverHeader->Link;
356  }
357 
358  return NULL;
359 }
struct _DOS_DRIVER * PDOS_DRIVER
#define DOS_DATA_OFFSET(x)
Definition: dos.h:35
#define TRUE
Definition: types.h:120
DWORD Link
Definition: device.h:110
DOS_DRIVER NullDevice
Definition: dos.h:89
WCHAR DeviceName[]
Definition: adapter.cpp:21
NTSYSAPI BOOLEAN NTAPI RtlEqualString(PSTRING String1, PSTRING String2, BOOLEAN CaseInSensitive)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define MAKELONG(a, b)
Definition: typedefs.h:248
smooth NULL
Definition: ftsmooth.c:416
#define FAR_POINTER(x)
Definition: emulator.h:31
#define DOS_DATA_SEGMENT
Definition: dos.h:33
unsigned long DWORD
Definition: ntddk_ex.h:95
PDOS_DEVICE_NODE DosGetDriverNode(DWORD Driver)
Definition: device.c:305
PDOS_SYSVARS SysVars
Definition: dos.c:47
#define LOWORD(l)
Definition: pedump.c:82
Definition: dlist.c:348

Referenced by DosCreateFile(), DosCreateFileEx(), and DosOpenFile().

◆ DosGetDriverNode()

PDOS_DEVICE_NODE DosGetDriverNode ( DWORD  Driver)

Definition at line 305 of file device.c.

306 {
307  PLIST_ENTRY i;
309 
310  for (i = DeviceList.Flink; i != &DeviceList; i = i->Flink)
311  {
313  if (Node->Driver == Driver) break;
314  }
315 
316  if (i == &DeviceList)
317  {
318  DPRINT1("The driver at %04X:%04X has no associated device node. "
319  "Installing automagically.\n",
320  HIWORD(Driver),
321  LOWORD(Driver));
322 
323  /* Create the device node */
325  Node->IoctlReadRoutine = DosDriverDispatchIoctlRead;
326  Node->ReadRoutine = DosDriverDispatchRead;
327  Node->PeekRoutine = DosDriverDispatchPeek;
328  Node->InputStatusRoutine = DosDriverDispatchInputStatus;
329  Node->FlushInputRoutine = DosDriverDispatchFlushInput;
330  Node->IoctlWriteRoutine = DosDriverDispatchIoctlWrite;
331  Node->WriteRoutine = DosDriverDispatchWrite;
332  Node->OutputStatusRoutine = DosDriverDispatchOutputStatus;
333  Node->FlushOutputRoutine = DosDriverDispatchFlushOutput;
334  Node->OpenRoutine = DosDriverDispatchOpen;
335  Node->CloseRoutine = DosDriverDispatchClose;
336  Node->OutputUntilBusyRoutine = DosDriverDispatchOutputUntilBusy;
337  }
338 
339  return Node;
340 }
static WORD NTAPI DosDriverDispatchOutputUntilBusy(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:211
static WORD NTAPI DosDriverDispatchOpen(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:201
static WORD NTAPI DosDriverDispatchClose(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:206
static PDOS_DEVICE_NODE DosCreateDeviceNode(DWORD Driver)
Definition: device.c:275
static WORD NTAPI DosDriverDispatchInputStatus(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:167
static WORD NTAPI DosDriverDispatchPeek(PDOS_DEVICE_NODE DeviceNode, PBYTE Character)
Definition: device.c:153
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static WORD NTAPI DosDriverDispatchIoctlWrite(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:177
union node Node
Definition: types.h:1255
static WORD NTAPI DosDriverDispatchRead(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:146
_In_ PCUNICODE_STRING _In_ PVOID Driver
Definition: cmfuncs.h:32
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
static WORD NTAPI DosDriverDispatchIoctlRead(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:139
Definition: typedefs.h:117
static WORD NTAPI DosDriverDispatchFlushOutput(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:196
static WORD NTAPI DosDriverDispatchOutputStatus(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:191
#define DPRINT1
Definition: precomp.h:8
#define HIWORD(l)
Definition: typedefs.h:246
static WORD NTAPI DosDriverDispatchWrite(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:184
static WORD NTAPI DosDriverDispatchFlushInput(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:172
#define LOWORD(l)
Definition: pedump.c:82
base of all file and directory entries
Definition: entries.h:82
static LIST_ENTRY DeviceList
Definition: device.c:44
Definition: dlist.c:348

Referenced by DosCheckInput(), DosCloseHandle(), DosCopyHandleTable(), DosDeviceIoControl(), DosFlushFileBuffers(), DosGetDevice(), DosReadFile(), DosReadLineBuffered(), and DosWriteFile().

◆ DosLoadDriver()

DWORD DosLoadDriver ( LPCSTR  DriverFile)

Definition at line 571 of file device.c.

572 {
574  HANDLE FileHandle = INVALID_HANDLE_VALUE, FileMapping = NULL;
575  LPBYTE Address = NULL;
576  DWORD Driver;
577  PDOS_DRIVER DriverHeader;
578  WORD Segment = 0;
579  DWORD FileSize;
580  DWORD DriversLoaded = 0;
583 
584  /* Open a handle to the driver file */
585  FileHandle = CreateFileA(DriverFile,
586  GENERIC_READ,
588  NULL,
591  NULL);
593  {
594  Result = GetLastError();
595  goto Cleanup;
596  }
597 
598  /* Get the file size */
600 
601  /* Allocate DOS memory for the driver */
603  if (Segment == 0)
604  {
606  goto Cleanup;
607  }
608 
609  /* Create a mapping object for the file */
610  FileMapping = CreateFileMapping(FileHandle,
611  NULL,
613  0,
614  0,
615  NULL);
616  if (FileMapping == NULL)
617  {
618  Result = GetLastError();
619  goto Cleanup;
620  }
621 
622  /* Map the file into memory */
623  Address = (LPBYTE)MapViewOfFile(FileMapping, FILE_MAP_READ, 0, 0, 0);
624  if (Address == NULL)
625  {
626  Result = GetLastError();
627  goto Cleanup;
628  }
629 
630  /* Copy the entire file to the DOS memory */
631  Driver = MAKELONG(0, Segment);
632  DriverHeader = (PDOS_DRIVER)FAR_POINTER(Driver);
633  RtlCopyMemory(DriverHeader, Address, FileSize);
634 
635  /* Loop through all the drivers in this file */
636  while (TRUE)
637  {
638  if (!(DriverHeader->DeviceAttributes & DOS_DEVATTR_CHARACTER))
639  {
640  DPRINT1("Error loading driver at %04X:%04X: "
641  "Block device drivers are not supported.\n",
642  HIWORD(Driver),
643  LOWORD(Driver));
644  goto Next;
645  }
646 
647  /* Send the driver an init request */
648  RtlZeroMemory(&Request, sizeof(Request));
649  Request.Header.RequestLength = sizeof(DOS_INIT_REQUEST);
650  Request.Header.CommandCode = DOS_DEVCMD_INIT;
651  // TODO: Set Request.DeviceString to the appropriate line in CONFIG.NT!
652  DosCallDriver(Driver, &Request.Header);
653 
654  if (Request.Header.Status & DOS_DEVSTAT_ERROR)
655  {
656  DPRINT1("Error loading driver at %04X:%04X: "
657  "Initialization routine returned error %u.\n",
658  HIWORD(Driver),
659  LOWORD(Driver),
660  Request.Header.Status & 0x7F);
661  goto Next;
662  }
663 
664  /* Create the device node */
666  DeviceNode->IoctlReadRoutine = DosDriverDispatchIoctlRead;
667  DeviceNode->ReadRoutine = DosDriverDispatchRead;
668  DeviceNode->PeekRoutine = DosDriverDispatchPeek;
669  DeviceNode->InputStatusRoutine = DosDriverDispatchInputStatus;
670  DeviceNode->FlushInputRoutine = DosDriverDispatchFlushInput;
671  DeviceNode->IoctlWriteRoutine = DosDriverDispatchIoctlWrite;
672  DeviceNode->WriteRoutine = DosDriverDispatchWrite;
673  DeviceNode->OutputStatusRoutine = DosDriverDispatchOutputStatus;
674  DeviceNode->FlushOutputRoutine = DosDriverDispatchFlushOutput;
675  DeviceNode->OpenRoutine = DosDriverDispatchOpen;
676  DeviceNode->CloseRoutine = DosDriverDispatchClose;
677  DeviceNode->OutputUntilBusyRoutine = DosDriverDispatchOutputUntilBusy;
678 
680  DriversLoaded++;
681 
682 Next:
683  if (LOWORD(DriverHeader->Link) == 0xFFFF) break;
684  Driver = DriverHeader->Link;
685  DriverHeader = (PDOS_DRIVER)FAR_POINTER(Driver);
686  }
687 
688  DPRINT1("%u drivers loaded from %s.\n", DriversLoaded, DriverFile);
689 
690 Cleanup:
691  if (Result != ERROR_SUCCESS)
692  {
693  /* It was not successful, cleanup the DOS memory */
695  }
696 
697  /* Unmap the file */
699 
700  /* Close the file mapping object */
701  if (FileMapping != NULL) CloseHandle(FileMapping);
702 
703  /* Close the file handle */
705 
706  return Result;
707 }
WORD LastErrorCode
Definition: dos.h:151
struct _DOS_DRIVER * PDOS_DRIVER
static WORD NTAPI DosDriverDispatchOutputUntilBusy(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:211
static WORD NTAPI DosDriverDispatchOpen(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:201
#define TRUE
Definition: types.h:120
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
#define CloseHandle
Definition: compat.h:406
DWORD Link
Definition: device.h:110
#define ERROR_SUCCESS
Definition: deptool.c:10
#define MapViewOfFile
Definition: compat.h:410
static WORD NTAPI DosDriverDispatchClose(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:206
static PDOS_DEVICE_NODE DosCreateDeviceNode(DWORD Driver)
Definition: device.c:275
BOOLEAN DosFreeMemory(WORD BlockData)
Definition: memory.c:418
#define CreateFileMapping
Definition: winbase.h:3574
static WORD NTAPI DosDriverDispatchInputStatus(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:167
static WORD NTAPI DosDriverDispatchPeek(PDOS_DEVICE_NODE DeviceNode, PBYTE Character)
Definition: device.c:153
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define DOS_DEVSTAT_ERROR
Definition: device.h:51
#define DOS_DEVCMD_INIT
Definition: device.h:31
static VOID DosAddDriver(DWORD Driver)
Definition: device.c:228
#define FILE_SHARE_READ
Definition: compat.h:125
_In_ NDIS_HANDLE _In_ PNDIS_REQUEST Request
Definition: ndis.h:5173
HANDLE FileHandle
Definition: stats.c:38
unsigned char * LPBYTE
Definition: typedefs.h:52
static WORD NTAPI DosDriverDispatchIoctlWrite(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:177
static WORD NTAPI DosDriverDispatchRead(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:146
#define MAKELONG(a, b)
Definition: typedefs.h:248
smooth NULL
Definition: ftsmooth.c:416
static WCHAR Address[46]
Definition: ping.c:68
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
WORD DosAllocateMemory(WORD Size, WORD *MaxAvailable)
Definition: memory.c:136
#define FAR_POINTER(x)
Definition: emulator.h:31
#define FILE_MAP_READ
Definition: compat.h:435
_In_ PCUNICODE_STRING _In_ PVOID Driver
Definition: cmfuncs.h:32
#define OPEN_EXISTING
Definition: compat.h:434
_Inout_ PVOID Segment
Definition: exfuncs.h:893
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:481
Definition: Node.h:9
struct _DOS_INIT_REQUEST DOS_INIT_REQUEST
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:126
static WORD NTAPI DosDriverDispatchIoctlRead(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:139
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
PDOS_SDA Sda
Definition: dos.c:48
#define GENERIC_READ
Definition: compat.h:124
static const WCHAR Cleanup[]
Definition: register.c:80
static WORD NTAPI DosDriverDispatchFlushOutput(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:196
WORD DeviceAttributes
Definition: device.h:111
#define DOS_DEVATTR_CHARACTER
Definition: device.h:29
static WORD NTAPI DosDriverDispatchOutputStatus(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:191
#define PAGE_READONLY
Definition: compat.h:127
static VOID DosCallDriver(DWORD Driver, PDOS_REQUEST_HEADER Request)
Definition: device.c:49
#define DPRINT1
Definition: precomp.h:8
#define HIWORD(l)
Definition: typedefs.h:246
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
static WORD NTAPI DosDriverDispatchWrite(PDOS_DEVICE_NODE DeviceNode, DWORD Buffer, PWORD Length)
Definition: device.c:184
static WORD NTAPI DosDriverDispatchFlushInput(PDOS_DEVICE_NODE DeviceNode)
Definition: device.c:172
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:407
#define UnmapViewOfFile
Definition: compat.h:411
#define LOWORD(l)
Definition: pedump.c:82