windows-nt/Source/XPSP1/NT/sdktools/ctlcode/ctlcode.h
2020-09-26 16:20:57 +08:00

199 lines
5.4 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Method and Access are filled tables, so directly index them
//
#include <wdm.h> // CTL_CODE definition
//
// allow easy access to parts of the ctl code
//
typedef union _CTL_CODE {
ULONG32 Code;
struct {
ULONG32 Method :2;
ULONG32 Function :12;
ULONG32 Access :2;
ULONG32 DeviceType :16;
};
} CTL_CODE, *PCTL_CODE;
typedef struct _IOCTL_DEVICE_TYPE {
PUCHAR Name;
ULONG32 Value;
} IOCTL_DEVICE_TYPE, *PIOCTL_DEVICE_TYPE;
typedef struct _IOCTL_METHOD {
PUCHAR Name;
ULONG32 Value;
} IOCTL_METHOD, *PIOCTL_METHOD;
typedef struct _IOCTL_ACCESS {
PUCHAR Name;
ULONG32 Value;
} IOCTL_ACCESS, *PIOCTL_ACCESS;
typedef struct _IOCTL_VALUE {
PUCHAR Name;
ULONG32 Code;
} IOCTL_VALUE, *PIOCTL_VALUE;
#define SeedIoctlBase(_I) { #_I, _I }
#define SeedIoctlMethod(_I) { #_I, _I }
#define SeedIoctlAccess(_I) { #_I, _I }
#define SeedIoctlValue(_I) { #_I, _I }
//
// code depends upon the fact that these are
// in numeric order, without any skipped values
// the index into the array is also the value.
//
IOCTL_METHOD TableIoctlMethod[] = {
SeedIoctlMethod(METHOD_BUFFERED),
SeedIoctlMethod(METHOD_IN_DIRECT),
SeedIoctlMethod(METHOD_OUT_DIRECT),
SeedIoctlMethod(METHOD_NEITHER),
{NULL, 0}
};
IOCTL_ACCESS TableIoctlAccess[] = {
SeedIoctlAccess(FILE_ANY_ACCESS),
SeedIoctlAccess(FILE_READ_ACCESS),
SeedIoctlAccess(FILE_WRITE_ACCESS),
{"FILE_READ_ACCESS | FILE_WRITE_ACCESS", 3}, // hack, cough
{NULL, 0}
};
IOCTL_DEVICE_TYPE TableIoctlDeviceType[] = {
{"Zero (invalid)", 0},
SeedIoctlBase(FILE_DEVICE_BEEP),
SeedIoctlBase(FILE_DEVICE_CD_ROM),
SeedIoctlBase(FILE_DEVICE_CD_ROM_FILE_SYSTEM),
SeedIoctlBase(FILE_DEVICE_CONTROLLER),
SeedIoctlBase(FILE_DEVICE_DATALINK),
SeedIoctlBase(FILE_DEVICE_DFS),
SeedIoctlBase(FILE_DEVICE_DISK),
SeedIoctlBase(FILE_DEVICE_DISK_FILE_SYSTEM),
SeedIoctlBase(FILE_DEVICE_FILE_SYSTEM),
SeedIoctlBase(FILE_DEVICE_INPORT_PORT),
SeedIoctlBase(FILE_DEVICE_KEYBOARD),
SeedIoctlBase(FILE_DEVICE_MAILSLOT),
SeedIoctlBase(FILE_DEVICE_MIDI_IN),
SeedIoctlBase(FILE_DEVICE_MIDI_OUT),
SeedIoctlBase(FILE_DEVICE_MOUSE),
SeedIoctlBase(FILE_DEVICE_MULTI_UNC_PROVIDER),
SeedIoctlBase(FILE_DEVICE_NAMED_PIPE),
SeedIoctlBase(FILE_DEVICE_NETWORK),
SeedIoctlBase(FILE_DEVICE_NETWORK_BROWSER),
SeedIoctlBase(FILE_DEVICE_NETWORK_FILE_SYSTEM),
SeedIoctlBase(FILE_DEVICE_NULL),
SeedIoctlBase(FILE_DEVICE_PARALLEL_PORT),
SeedIoctlBase(FILE_DEVICE_PHYSICAL_NETCARD),
SeedIoctlBase(FILE_DEVICE_PRINTER),
SeedIoctlBase(FILE_DEVICE_SCANNER),
SeedIoctlBase(FILE_DEVICE_SERIAL_MOUSE_PORT),
SeedIoctlBase(FILE_DEVICE_SERIAL_PORT),
SeedIoctlBase(FILE_DEVICE_SCREEN),
SeedIoctlBase(FILE_DEVICE_SOUND),
SeedIoctlBase(FILE_DEVICE_STREAMS),
SeedIoctlBase(FILE_DEVICE_TAPE),
SeedIoctlBase(FILE_DEVICE_TAPE_FILE_SYSTEM),
SeedIoctlBase(FILE_DEVICE_TRANSPORT),
SeedIoctlBase(FILE_DEVICE_UNKNOWN),
SeedIoctlBase(FILE_DEVICE_VIDEO),
SeedIoctlBase(FILE_DEVICE_VIRTUAL_DISK),
SeedIoctlBase(FILE_DEVICE_WAVE_IN),
SeedIoctlBase(FILE_DEVICE_WAVE_OUT),
SeedIoctlBase(FILE_DEVICE_8042_PORT),
SeedIoctlBase(FILE_DEVICE_NETWORK_REDIRECTOR),
SeedIoctlBase(FILE_DEVICE_BATTERY),
SeedIoctlBase(FILE_DEVICE_BUS_EXTENDER),
SeedIoctlBase(FILE_DEVICE_MODEM),
SeedIoctlBase(FILE_DEVICE_VDM),
SeedIoctlBase(FILE_DEVICE_MASS_STORAGE),
SeedIoctlBase(FILE_DEVICE_SMB),
SeedIoctlBase(FILE_DEVICE_KS),
SeedIoctlBase(FILE_DEVICE_CHANGER),
SeedIoctlBase(FILE_DEVICE_SMARTCARD),
SeedIoctlBase(FILE_DEVICE_ACPI),
SeedIoctlBase(FILE_DEVICE_DVD),
SeedIoctlBase(FILE_DEVICE_FULLSCREEN_VIDEO),
SeedIoctlBase(FILE_DEVICE_DFS_FILE_SYSTEM),
SeedIoctlBase(FILE_DEVICE_DFS_VOLUME),
SeedIoctlBase(FILE_DEVICE_SERENUM),
SeedIoctlBase(FILE_DEVICE_TERMSRV),
SeedIoctlBase(FILE_DEVICE_KSEC),
{NULL, 0}
};
//
// max must subtract one null-termination
//
#define MAX_IOCTL_METHOD ((sizeof(TableIoctlMethod)/sizeof(IOCTL_METHOD)-1))
#define MAX_IOCTL_ACCESS ((sizeof(TableIoctlAccess)/sizeof(IOCTL_ACCESS)-1))
#define MAX_IOCTL_DEVICE_TYPE ((sizeof(TableIoctlDeviceType)/sizeof(IOCTL_DEVICE_TYPE)-1))
//
// seed all the ioctls from the sdk
//
#include "batclass.h"
#include "dfsfsctl.h"
#include "gameport.h"
#include "hidclass.h"
#include "mountmgr.h"
#include "ntddaux.h"
#include "ntddbeep.h"
#include "ntddbrow.h"
#include "ntddcdrm.h"
#include "ntddcdvd.h"
#include "ntddchgr.h"
#include "ntdddisk.h"
#include "ntdddlc.h"
#include "ntddfs.h"
//#include "ntddip.h"
#include "ntddjoy.h"
#include "ntddkbd.h"
#include "ntddksec.h"
#include "ntddmidi.h"
#include "ntddmodm.h"
#include "ntddmou.h"
#include "ntddmup.h"
#include "ntddndis.h"
#include "ntddnpfs.h"
#include "ntddnull.h"
#include "ntddpar.h"
#include "ntddpcm.h"
#include "ntddrdr.h"
#include "ntddscsi.h"
#include "ntddser.h"
#include "ntddsnd.h"
#include "ntddstor.h"
#include "ntddstrm.h"
#include "ntddtape.h"
#include "ntddtdi.h"
#include "ntddtime.h"
#include "ntddtx.h"
#include "ntddvdeo.h"
#include "ntddvdsk.h"
#include "ntddvol.h"
#include "ntddwave.h"
#include "scsiscan.h"
#include "swenum.h"
#include "usbioctl.h"
#include "usbscan.h"
#include "wdm.h"
#include "winsmcrd.h"
#include "wmistr.h"
#include "wmiumkm.h"
// #include "i2osmi.h" // can't find "I2OUtil.h"
// #include "hydra\ica*" // bad definitions
#include "sdkioctl.h"