Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

219 lines
7.4 KiB

;/*
;***************************************************************************;
;* Microsoft MS-DOS CDROM Extensions *;
;* Copyright (C) Microsoft Corporation, 1992 - 1999*;
;***************************************************************************;
;* :ts=4 ; tab-size=4 *;
;**
;* DEVSYM.H
;*
;* DESCRIPTION:
;*
;* HISTORY:
;*
;**
;------------------------------ INCLUDES -----------------------------------;
include redir\devsym.inc
;---------------------------------------------------------------------------;
SYSDEV2 STRUC
SDEVREC DB size SYSDEV dup (?)
SDEVRSVD DW ?
SDEVLET DB ?
SDEVUNITS DB ?
SYSDEV2 ENDS
DEVRDL = 128 ; Read long
DEVRDLNB = 129 ; Read long non blocking
DEVRDLPRE = 130 ; Read long prefetch
DEVSEEK = 131 ; Seek long
DEVPLAY = 132 ; Device Play
DEVSTOP = 133 ; Stop device play
DEVWRTL = 134 ; Write long
DEVWRTLNB = 135 ; Write long nonblocking
DEVWRTLV = 136 ; Write long verify
;*/
/* Device table and SRH definition */
/* The device table list has the form: */
typedef struct SYSDEV {
struct SYSDEV far *sdevnext; /* Pointer to next dev header */
unsigned short sdevatt; /* Attributes of the device */
void (*sdevstrat)(); /* Strategy entry point */
void (*sdevint)(); /* Interrupt entry point */
unsigned char sdevname[8]; /* Name of device (only first byte used for block) */
unsigned short sdevrsvd; /* Reserved word */
unsigned char sdevlet; /* Drive letter of first unit */
unsigned char sdevunits; /* Number of units handled */
} SYSDEV;
/*
** Attribute bit masks
**
** Character devices:
**
** Bit 15 -> must be 1
** 14 -> 1 if the device understands IOCTL control strings
** 13 -> 1 if the device supports output-until-busy
** 12 -> unused
** 11 -> 1 if the device understands Open/Close
** 10 -> must be 0
** 9 -> must be 0
** 8 -> unused
** 7 -> unused
** 6 -> unused
** 5 -> unused
** 4 -> 1 if device is recipient of INT 29h
** 3 -> 1 if device is clock device
** 2 -> 1 if device is null device
** 1 -> 1 if device is console output
** 0 -> 1 if device is console input
**
** Block devices:
**
** Bit 15 -> must be 0
** 14 -> 1 if the device understands IOCTL control strings
** 13 -> 1 if the device determines media by examining the FAT ID byte.
** This requires the first sector of the fat to *always* reside in
** the same place.
** 12 -> unused
** 11 -> 1 if the device understands Open/Close/removable media
** 10 -> must be 0
** 9 -> must be 0
** 8 -> unused
** 7 -> unused
** 6 -> if device has support for GetMap/SetMap of Logical Drives.
** if the device understands Generic IOCTL function calls.
** 5 -> unused
** 4 -> unused
** 3 -> unused
** 2 -> unused
** 1 -> unused
** 0 -> unused
*/
#define DevTyp 0x8000 /* Bit 15 - 1 if Char, 0 if block */
#define CharDev 0x8000
#define DevIOCtl 0x4000 /* Bit 14 - CONTROL mode bit */
#define ISFATBYDEV 0x2000 /* Bit 13 - Device uses FAT ID bytes, */
/* comp media. */
#define OutTilBusy 0x2000 /* Output until busy is enabled */
#define ISNET 0x1000 /* Bit 12 - 1 if a NET device, 0 if */
/* not. Currently block only. */
#define DEVOPCL 0x0800 /* Bit 11 - 1 if this device has */
/* OPEN,CLOSE and REMOVABLE MEDIA */
/* entry points, 0 if not */
#define EXTENTBIT 0x0400 /* Bit 10 - Currently 0 on all devs */
/* This bit is reserved for future use */
/* to extend the device header beyond */
/* its current form. */
/* NOTE Bit 9 is currently used on IBM systems to indicate "drive is shared".
** See IOCTL function 9. THIS USE IS NOT DOCUMENTED, it is used by some
** of the utilities which are supposed to FAIL on shared drives on server
** machines (FORMAT,CHKDSK,RECOVER,..).
*/
#define DEV320 0x0040 /* Bit 6 - For block devices, this */
/* device supports Set/Get Map of */
/* logical drives, and supports */
/* Generic IOCTL calls. */
/* For character devices, this */
/* device supports Generic IOCTL. */
/* This is a DOS 3.2 device driver. */
#define ISSPEC 0x0010 /* Bit 4 - This device is special */
#define ISCLOCK 0x0008 /* Bit 3 - This device is the clock device. */
#define ISNULL 0x0004 /* Bit 2 - This device is the null device. */
#define ISCOUT 0x0002 /* Bit 1 - This device is the console output. */
#define ISCIN 0x0001 /* Bit 0 - This device is the console input. */
/* Static Request Header */
typedef struct SRHEAD {
unsigned char REQLEN; /* Length in bytes of request block */
unsigned char REQUNIT; /* Device unit number */
unsigned char REQFUNC; /* Type of request */
unsigned short REQSTAT; /* Status Word */
unsigned char REQQLNK[8]; /* Reserved for queue links */
} SRHEAD;
/* Status word masks */
#define STERR 0x8000 /* Bit 15 - Error */
#define STBUI 0x0200 /* Bit 9 - Busy */
#define STDON 0x0100 /* Bit 8 - Done */
#define STECODE 0x00FF /* Error code */
/* Function codes */
#define DEVINIT 0 /* Initialization */
#define DINITHL 26 /* Size of init header */
#define DEVMDCH 1 /* Media check */
#define DMEDHL 15 /* Size of media check header */
#define DEVBPB 2 /* Get BPB */
#define DEVRDIOCTL 3 /* IOCTL read */
#define DBPBHL 22 /* Size of Get BPB header */
#define DEVRD 4 /* Read */
#define DRDWRHL 22 /* Size of RD/WR header */
#define DEVRDND 5 /* Non destructive read no wait (char devs) */
#define DRDNDHL 14 /* Size of non destructive read header */
#define DEVIST 6 /* Input status */
#define DSTATHL 13 /* Size of status header */
#define DEVIFL 7 /* Input flush */
#define DFLSHL 15 /* Size of flush header */
#define DEVWRT 8 /* Write */
#define DEVWRTV 9 /* Write with verify */
#define DEVOST 10 /* Output status */
#define DEVOFL 11 /* Output flush */
#define DEVWRIOCTL 12 /* IOCTL write */
#define DEVOPN 13 /* Device open */
#define DEVCLS 14 /* Device close */
#define DOPCLHL 13 /* Size of OPEN/CLOSE header */
#define DEVRMD 15 /* Removable media */
#define REMHL 13 /* Size of Removable media header */
#define GENIOCTL 19
/* The next three are used in DOS 4.0
** 20
** 21
** 22
*/
#define DEVGETOWN 23 /* Get Device Owner */
#define DEVSETOWN 24 /* Set Device Owner */
#define OWNHL 13 /* Size of Device Owner header */
#define DevOUT 16 /* output until busy. */
#define DevOutL DevWrt /* length of output until busy */
#define DEVRDL 128 /* Read long */
#define DEVRDLNB 129 /* Read long non blocking */
#define DEVRDLPRE 130 /* Read long prefetch */
#define DEVSEEK 131 /* Seek long */
#define DEVPLAY 132 /* Device Play */
#define DEVSTOP 133 /* Stop device play */
#define DEVWRTL 134 /* Write long */
#define DEVWRTLNB 135 /* Write long nonblocking */
#define DEVWRTLV 136 /* Write long verify */
/* Generic IOCTL Request structure
** See the DOS 4.0 Device Driver Spec for Further elaboration.
*/
typedef struct IOCTL_Req {
struct SRHEAD ReqHdr;
/* Generic IOCTL addition. */
unsigned char MajorFunction; /* Function Code */
unsigned char MinorFunction; /* Function Category */
unsigned short Reg_SI;
unsigned short Reg_DI;
unsigned char far *GenericIOCTL_Packet; /* Pointer to Data Buffer */
} IOCTL_Req;
/* Definitions for IOCTL_Req.MinorFunction */
#define GEN_IOCTL_WRT_TRK 0x40
#define GEN_IOCTL_RD_TRK 0x60
#define GEN_IOCTL_FN_TST 0x20 /* Used to diff. bet reads and wrts */
\