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

📄 vcd.h

📁 使用DELPHI制作地虚拟光驱
💻 H
字号:
#ifndef _VCD_
#define _VCD_

#ifndef __T
#ifdef _NTDDK_
#define __T(x)  L ## x
#else
#define __T(x)  x
#endif
#endif

#ifndef _T
#define _T(x)   __T(x)
#endif

#define DEVICE_BASE_NAME    _T("\\VCD")
#define DEVICE_DIR_NAME     _T("\\Device")      DEVICE_BASE_NAME
#define DEVICE_FULL_NAME    DEVICE_DIR_NAME     DEVICE_BASE_NAME

#define DEVICE_VCD          0x8000

//打开文件
#define IOCTL_VCD_OPEN_FILE      CTL_CODE(DEVICE_VCD, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
//关闭文件
#define IOCTL_VCD_CLOSE_FILE     CTL_CODE(DEVICE_VCD, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
//查询设备信息
#define IOCTL_VCD_QUERY_DEVICE	 CTL_CODE(DEVICE_VCD, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS)


#define MAX_PATH             260

#define DWORD unsigned long
#define WORD unsigned short
#define BOOL unsigned long
#define BYTE unsigned char

/*
//虚拟光驱文件信息
typedef struct _VCD_FILE_INFORMATION {
	LARGE_INTEGER   FileSize;                   //文件大小
	UCHAR           FileName[MAX_PATH];         //文件名
} VCD_FILE_INFORMATION, *PVCD_FILE_INFORMATION;
*/

//设备的信息
typedef struct _VCD_DEVICE_INFORMATION {
	ULONG           Magic;                      //标示,符和这个标示就认为是VCD设备
	ULONG           Version;                    //版本
	ULONG           Index;                      //设备序号 
	BOOL            MediaIn;                    //设备中是否有媒体
	UCHAR           FileName[MAX_PATH];         //文件名
	UCHAR           Descaption[MAX_PATH];       //设备描述
}VCD_DEVICE_INFORMATION, *PVCD_DEVICE_INFORMATION;

#define DEVICE_MAGIC     0xAAFFFFAA
#define DEVICE_VERSION   0x00000001

//创建多少个CDROM设备,我定为4个.
#define DEVICE_COUNT     0x4

//驱动对象扩展信息
typedef struct _DEVICE_EXTENSION {
	ULONG                       index;                     //设备的ID
	BOOLEAN                     media_in_device;           //设备里是否有媒体
	HANDLE                      file_handle;               //文件句柄 
    UCHAR                       oldfile_name[MAX_PATH];    //传进来的原始文件名
	ANSI_STRING                 file_name;                 //文件名
	LARGE_INTEGER               file_size;                 //文件大小  
	PSECURITY_CLIENT_CONTEXT    security_client_context;   //客户端安全上下文
	LIST_ENTRY                  list_head;                 //线程List   
	KSPIN_LOCK                  list_lock;                 //线程锁 
	KEVENT                      k_event;                   //事件句柄  
	PVOID                       thread_pointer;            //线程对象指针 
	BOOLEAN                     terminate_thread;          //线程是否已经终止
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

//目录设备 "\\Device" 的句柄
extern HANDLE device_root_handle;


#define SECTOR_SIZE             512

#define TOC_DATA_TRACK          0x04

//入口
NTSTATUS 
DriverEntry(IN PDRIVER_OBJECT DriverObject, 
			IN PUNICODE_STRING RegistryPath );
//

//创建CDROM设备
NTSTATUS
IoCreateCDROMDevice(
				   IN PDRIVER_OBJECT   DriverObject,
				   IN ULONG            Number
				  );
NTSTATUS
IrpCreateClose (
				IN PDEVICE_OBJECT   DeviceObject,
				IN PIRP             Irp
				);
VOID
IrpUnload (
		   IN PDRIVER_OBJECT DriverObject
		   );
NTSTATUS
IrpReadWrite(
			 IN PDEVICE_OBJECT   DeviceObject,
			 IN PIRP             Irp
			 );
NTSTATUS
IrpDeviceControl(
			     IN PDEVICE_OBJECT   DeviceObject,
			     IN PIRP             Irp
			    );



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -