📄 speedcd.h
字号:
#include "speedver.h"
// Use this so that the file system driver does not mount so we can unload
// the driver while testing
//#define FILE_DEVICE_SPEEDCD FILE_DEVICE_UNKNOWN
#define FILE_DEVICE_SPEEDCD FILE_DEVICE_CD_ROM
//#define SPEEDCD_UNLOADABLE
#define FILE_FORMAT_SPEED_CD 0
#define FILE_FORMAT_ISO 1
// this must stay 8 bit ascii
#define SPEEDCD_FILE_TAG "SPEEDCD image file v1.0 coolqiu"
//
// Defining private IOCTLs and structures.
//
// this ioctl is not used
#define IOCTL_SPEEDCD_GET_DUBUG_LOG CTL_CODE( \
FILE_DEVICE_CD_ROM, \
0x801, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS )
#define IOCTL_SPEEDCD_ADD_DEVICE CTL_CODE( \
FILE_DEVICE_CD_ROM, \
0x802, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS )
#define IOCTL_SPEEDCD_REMOVE_DEVICE CTL_CODE( \
FILE_DEVICE_CD_ROM, \
0x803, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS )
// Previous version did not support this IOCTL
// V 1.31 was the last version that had no support for it.
#define IOCTL_SPEEDCD_GET_VERSION CTL_CODE( \
FILE_DEVICE_CD_ROM, \
0x804, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS )
typedef struct {
WCHAR wcDriveLetter;
WCHAR szFileName[500];
} SPEEDCD_ADD_DEVICE;
typedef struct _SPEEDCD_EXTENSION {
PDEVICE_OBJECT DeviceObject;
// PUCHAR DiskImage; // drive letter
UNICODE_STRING DataFileName; // file and path name of the source volume
UNICODE_STRING Win32NameString; // name so we can destroy the symbolic link
ULONG DataFormat; // specifies either iso or SPEEDCD
} RAMDISK_EXTENSION, *PSPEEDCD_EXTENSION;
#define WIN32_PATH L"\\DosDevices\\"
#if DBG
#define RAMDBUGCHECK ((ULONG)0x80000000)
#define RAMDDIAG1 ((ULONG)0x00000001)
#define RAMDDIAG2 ((ULONG)0x00000002)
#define RAMDERRORS ((ULONG)0x00000004)
#define SPEEDCDDump(LEVEL, STRING) \
do { \
if (SPEEDCDDebugLevel & LEVEL) { \
DbgPrint STRING; \
} \
if (LEVEL == RAMDBUGCHECK) { \
ASSERT(FALSE); \
} \
} while (0)
#else
#define SPEEDCDDump(LEVEL,STRING) do {NOTHING;} while (0)
#endif
int
sprintf(char *s, const char *format, ...);
//
// Device driver routine declarations.
//
NTSTATUS
DriverEntry(
IN OUT PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
NTSTATUS
SPEEDCDInitializeVolumes(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING ParamPath,
IN PUNICODE_STRING DriveLetterString,
IN PUNICODE_STRING ImagePathString,
IN BOOLEAN bDoDiveceInitializing
);
NTSTATUS
SPEEDCDCreateClose(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SPEEDCDDeviceControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SPEEDCDReadWrite(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
VOID
SPEEDCDUnloadDriver(
IN PDRIVER_OBJECT DriverObject
);
VOID SPEEDCDLogS(char * pMessage);
VOID SPEEDCDLogSL(char * pMessage,ULONG number);
VOID SPEEDCDLogWriteString(char * pMessage);
VOID SPEEDCDLogWriteULong(ULONG ulValue);
NTSTATUS SPEEDCDReadOffset(PLARGE_INTEGER offset,PVOID dest,ULONG length,
PUNICODE_STRING pFileName);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -