ÔÆÌ⺣ - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

µ±Ç°Î»ÖãºÊ×Ò³ > £¨×ªÔØ£©WindowsÎļþϵͳ¹ýÂËÇý¶¯¿ª·¢½Ì³Ì

£¨×ªÔØ£©WindowsÎļþϵͳ¹ýÂËÇý¶¯¿ª·¢½Ì³Ì

  • 62 ´ÎÔĶÁ
  • 3 ´ÎÏÂÔØ
  • 2026/4/26 19:01:41

// È»ºóÎÒÉú³É¿ØÖÆÉ豸,ËäÈ»ÏÖÔÚÎҵĿØÖÆÉ豸ʲô¶¼²»¸É wd_ustr_init(&name,L\status = wdff_cdo_create(driver,0,&name,&g_cdo);

if(!wd_suc(status)) {

if(status == wd_stat_path_not_found) {

// ÕâÖÖÇé¿ö·¢ÉúÓÚFileSystemFilters·¾¶²»´æÔÚ¡£Õâ¸ö·¾¶ÊÇ // ÔÚxpÉϲżÓÉϵġ£ËùÒÔ2000Ï»áÔËÐе½ÕâÀï wd_ustr_init(&name,L\status = wdff_cdo_create(driver,0,&name,&g_cdo); };

if(!wd_suc(status)) {

wd_printf0(\return status; } }

wd_printf0(\return status; }

ΪÁËÈôúÂë¿´ÆðÀ´ÏóÉϱߵÄÄÇÑù£¬ÎÒ²»µÃ²»×öÁ˺ܶàת»»¡£Èç

#define DriverEntry wd_main

Ò»ÖÖˬµÄ¸Ð¾õ£¬ÖÕÓÚ¿ÉÒÔÔÚд¿´ÆðÀ´¸üÏóÊÇmain()µÄº¯ÊýÖй¤×÷ÁË¡£ wd_dev_create Õâ¸öº¯ÊýÄÚ²¿µ÷ÓõÄÊÇIoCreateDevice.¶øwd_sucʵ¼ÊÉÏÊÇSUCCESS()ÕâÑùµÄºê¡£

// ----------------------wdf.hÖеÄÄÚÈÝ------------------------------ #include \

#define in IN #define out OUT

#define optional OPTIONAL

#define wd_ustr UNICODE_STRING #define wdp_ustr PUNICODE_STRING #define wd_main DriverEntry

// É豸¡¢Çý¶¯¶ÔÏóÀàÐÍ

typedef DRIVER_OBJECT wd_drv;

typedef DEVICE_OBJECT wd_dev; typedef DRIVER_OBJECT wd_pdrv; typedef PDEVICE_OBJECT wd_pdev;

enum {

wd_dev_disk_fs = FILE_DEVICE_DISK_FILE_SYSTEM,

wd_dev_cdrom_fs = FILE_DEVICE_CD_ROM_FILE_SYSTEM, wd_dev_network_fs = FILE_DEVICE_NETWORK_FILE_SYSTEM };

// ״̬Ïà¹ØµÄÀàÐͺͺê typedef NTSTATUS wd_stat;

enum {

wd_stat_suc = STATUS_SUCCESS,

wd_stat_path_not_found = STATUS_OBJECT_PATH_NOT_FOUND, wd_stat_insufficient_res = STATUS_INSUFFICIENT_RESOURCES, wd_stat_invalid_dev_req = STATUS_INVALID_DEVICE_REQUEST, wd_stat_no_such_dev = STATUS_NO_SUCH_DEVICE,

wd_stat_image_already_loaded = STATUS_IMAGE_ALREADY_LOADED, wd_stat_more_processing = STATUS_MORE_PROCESSING_REQUIRED, wd_stat_pending = STATUS_PENDING };

_inline wd_bool wd_suc(wd_stat state) {

return NT_SUCCESS(state); }

#define wd_printf0 DbgPrint

_inline wd_void wd_ustr_init(in out wd_ustr* str, in const wd_wchar* chars) {

RtlInitUnicodeString(str,chars); };

_inline wd_void wd_ustr_init_em( in out wd_ustr*str, in wd_wchar *chars, in wd_size size) {

RtlInitEmptyUnicodeString(str,chars,size); };

wdf.hÕâ¸öÎļþÎÒ½ö½ö½ÚÑ¡ÁËÐèÒªµÄ²¿·Ö¡£ÒÔÉÏÄúÒѾ­ÓµÓÐÁËÒ»¸ö¼òµ¥µÄ¡°Çý¶¯¡±µÄÍêÕûµÄ´úÂë¡£ËüÉõÖÁ¿ÉÒÔ±àÒ룬°²×°£¨ÇëÐÞ¸Äsfilter.infÎļþ£¬Æä·½·¨²»¹ýÊǽ«¶à´¦sfilter¸ÄΪ\Ï£ÍûÕâ¸ö¹ý³ÌÖÐÄú²»»á³öÏÖÎÊÌ⣩¡£È»ºó°Ñwdf.hºÍwdf_filter.c·ÅÔÚÄúн¨Á¢µÄĿ¼Ï£¬Õâ¸öĿ¼Ï»¹Ó¦¸ÃÓÐÁíÁ½¸öÎļþ¡£Ò»¸öÊÇMakefile,Çë´ÓsfilterĿ¼Ï¿½±´¡£ÁíÒ»¸öÊÇSOURCES£¬ÇëÊäÈëÈçÏÂÄÚÈÝ£º TARGETNAME=our_fs_filter TARGETPATH=obj

TARGETTYPE=DRIVER DRIVERTYPE=FS BROWSER_INFO=1 SOURCES=wdf_filter.c

ʹÓÃddk±àÒëÖ®ºóÄú½«µÃµ½our_fs_filter.sys.°ÑÕâ¸öÎļþÓëǰËùÃèÊöµÄinfÎļþͬһĿ¼£¬°´ÉϽÚËùÐðÊö·½·¨°²×°¡£

Õâ¸öÇý¶¯²»ÆðÈκÎ×÷Ó㬵«ÊÇÄãÒѾ­³É¹¦µÄÍê³ÉÁË\

2. ·Ö·¢Àý³Ì,fast io

ÉÏÒ»½Ú½ö½öÉú³ÉÁË¿ØÖÆÉ豸¶ÔÏó¡£µ«ÊDz»ÒªÍü¼Ç£¬Çý¶¯¿ª·¢µÄÖ÷Òª¹¤×÷ÊÇ׫д·Ö·¢Àý³Ì(dispatch functions.).½ÓÉÏÒ»½Ó£¬ÎÒÃÇÒѾ­ÖªµÀ×Ô¼ºµÄDriverObject±£´æÔÚÉÏÎÄ´úÂëµÄdriverÖС£ÏÖÔÚÎÒдÈçÏÂÒ»¸öº¯ÊýÀ´Ö¸¶¨Ò»¸öĬÈϵÄdispatch function¸øËü¡£

//-----------------wdf.hÖеĴúÂë---------------------- typedef PDRIVER_DISPATCH wd_disp_fuc;

_inline wd_void wd_drv_set_dispatch(in wd_drv* driver, in wd_disp_fuc disp) {

wd_size i;

for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++) driver->MajorFunction = disp; }

ÔÚǰ±ßµÄwd_mainÖУ¬ÎÒÖ»Òª¼Ó

wd_drv_set_dispatch(driver,my_dispatch_func);

¾ÍΪÕâ¸öÇý¶¯Ö¸¶¨ÁËÒ»¸öĬÈϵÄDispatch Function.ËùÓеÄirpÇëÇ󣬶¼»á±»·¢Ë͵½Õâ¸öº¯Êý¡£µ«ÊÇ£¬ÎÒ¿ÉÄܲ»Ï£ÍûÕâ¸öº¯Êý´¦Àí¹ýÓÚ¸´ÔÓ£¬¶øÏ£Íû°ÑһЩ³£¼ûµÄÇëÇó¶ÀÁ¢³öÀ´£¬ÈçRead,Write,Create,Close,ÄÇÎÒÓÖдÁ˼¸¸öº¯ÊýרÃÅÓÃÀ´ÉèÖÃÕ⼸¸öDispatch Functions.

//-----------------wdf.hÖеĴúÂë---------------------- _inline wd_void wd_drv_set_read( in wd_drv* driver, in wd_disp_fuc read) {

driver->MajorFunction[IRP_MJ_READ] = read; }

_inline wd_void wd_drv_set_write( in wd_drv* driver, in wd_disp_fuc write) {

driver->MajorFunction[IRP_MJ_WRITE] = write; }

wd_void wd_drv_set_create(in wd_drv* driver, in wd_disp_fuc create) {

driver->MajorFunction[IRP_MJ_CREATE] = create;

driver->MajorFunction[IRP_MJ_CREATE_NAMED_PIPE] = create; driver->MajorFunction[IRP_MJ_CREATE_MAILSLOT] = create; }

wd_void wd_drv_set_file_sys_control(in wd_drv* driver, in wd_disp_fuc control) {

driver->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = control; }

wd_void wd_drv_set_clean_up(in wd_drv* driver, in wd_disp_fuc clean_up) {

driver->MajorFunction[IRP_MJ_CLEANUP] = clean_up; }

wd_void wd_drv_set_close(in wd_drv* driver, in wd_disp_fuc close) {

driver->MajorFunction[IRP_MJ_CLOSE] = close; }

±ð¿´ÎÒÂÞÁÐn¶à´úÂ룬Æäʵ¾ÍÊÇÔÚÉèÖÃdriver->MajorFunctionÕâ¸öÊý×é¶øÒÑ¡£Òò´ËÔÚwd_main¶Ôdispatch functionsµÄÉèÖ㬾ͱä³ÉÁËϱßÕâÑùµÄ£º

  • ÊÕ²Ø
  • Î¥¹æ¾Ù±¨
  • °æÈ¨ÈÏÁì
ÏÂÔØÎĵµ10.00 Ôª ¼ÓÈëVIPÃâ·ÑÏÂÔØ
ÍÆ¼öÏÂÔØ
±¾ÎÄ×÷Õߣº...

¹²·ÖÏí92ƪÏà¹ØÎĵµ

Îĵµ¼ò½é£º

// È»ºóÎÒÉú³É¿ØÖÆÉ豸,ËäÈ»ÏÖÔÚÎҵĿØÖÆÉ豸ʲô¶¼²»¸É wd_ustr_init(&name,L\status = wdff_cdo_create(driver,0,&name,&g_cdo); if(!wd_suc(status)) { if(status == wd_stat_path_not_found) { // ÕâÖÖÇé¿ö·¢ÉúÓÚFileSystemFilters·¾¶²»´æÔÚ¡£Õâ¸ö·¾¶ÊÇ // ÔÚxpÉϲżÓÉϵġ£ËùÒÔ2000Ï»áÔËÐе½ÕâÀï wd_ustr_init(&name,L\status = wdff_cdo_create(driver,0,&name,&g_cdo); }; if(!wd_suc(status)) { wd_printf0(\return status

¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩
µ¥Æª¸¶·ÑÏÂÔØ
ÏÞÊ±ÌØ¼Û£º10 Ôª/·Ý Ô­¼Û:20Ôª
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºfanwen365 QQ£º370150219
Copyright © ÔÆÌ⺣ All Rights Reserved. ËÕICP±¸16052595ºÅ-3 ÍøÕ¾µØÍ¼ ¿Í·þQQ£º370150219 ÓÊÏ䣺370150219@qq.com