⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 speedcd.h

📁 虚拟光驱程序
💻 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 + -