199 lines
5.4 KiB
C
199 lines
5.4 KiB
C
//
|
||
// 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"
|