锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
IRP_MJ_CLEANUP
淇濇寔榪涚▼瀹氫箟涓婁笅鏂囦俊鎭殑椹卞姩鍣紝蹇呴』鍦―ispatchCleanup涓寘鍚玞leanup璇鋒眰銆?/p>
浣曟椂鍙戦侊細
鏀跺埌IRP_MJ_CLEANUP鎰忓懗鐫璇鋒眰鐨勭洰鏍囪澶囦笌鐩爣鏂囦歡鐨勫彞鏌勭浉鍏籌紙涔熷彲鑳藉洜涓篿o璇鋒眰鍚庢病鏈夐噴鏀撅級
鍏ュ弬錛?br>鏃?/p>
鍑哄弬錛?br>鏃?/p>
鎿嶄綔錛?br>璇RP鍦ㄥ叧闂?file object 鍙ユ焺鐨勮繘紼嬩笂涓嬫枃涓彂閫併傚洜姝わ紝椹卞姩鍣ㄥ簲璇ラ噴鏀捐繘紼嬩笂涓嬫枃涓墍鎸囧畾鐨勮祫婧愶紝姣斿涔嬪墠椹卞姩鍣ㄩ攣瀹氭垨鏄犲皠鐨剈ser memory絳夈?br>濡傛灉椹卞姩鍣ㄧ殑 device objects 鐘舵佹槸exclusive錛屽垯璇evice鏄嫭鍗犳х殑錛屼竴嬈″彧鑳戒負涓涓嚎紼嬫湇鍔°傞┍鍔ㄥ櫒蹇呴』緇撴潫褰撳墠鐩爣 device object 闃熷垪涓殑鎵鏈塈RP錛屽茍璁劇疆鍏禝/O status block涓篠TATUS_CANCELLED銆?br>鍙﹀錛岄┍鍔ㄥ櫒鍙槸闇瑕佸彇娑堝茍緇撴潫涓庡緟閲婃斁鐨刦ile object鍙ユ焺鐩稿叧鐨処RP闃熷垪鎴愬憳銆傦紙鎸囧悜file object鐨勬寚閽堜綅浜庨┍鍔ㄥ櫒IRP IO_STACK_LOCATION鐨凢ileObject鎴愬憳涓傦級鍙栨秷闃熷垪涓殑IRP鍚庯紝椹卞姩鍣ㄧ粨鏉熶簡clear up IRP鎿嶄綔錛屽茍灝嗚嚜韜殑I/O status block緗負STATUS_SUCCESS銆?br>//------------------------------------------------------------------------------------------
IRP_MJ_CLOSE
椹卞姩鍣ㄥ繀欏誨湪DispatchClose涓寘鍚叧闂姹傚拰椹卞姩鍣ㄧ殑鍙兘鍙戠敓鐨勫紓甯革紝鍥犱負璇ラ┍鍔ㄥ櫒鍙兘閫氳繃鍏抽棴緋葷粺鏉ュ嵏杞借澶囷紝淇濇寔浜嗙郴緇熷垎欏墊枃浠剁殑鐨勭鐩橀┍鍔ㄥ櫒灝卞睘浜庤繖綾婚┍鍔ㄥ櫒銆傚叿鏈夎綾葷壒鎬ч┍鍔ㄥ櫒鏀寔鍔ㄦ佸嵏杞姐?/p>
浣曟椂鍙戦侊細
鏀跺埌IRP_MJ_CLOSE璇鋒眰鎰忓懗鐫涓庣洰鏍嘾evice object鐩稿叧鐨刦ile object鍙ユ焺宸茬粡鍏抽棴鎴栭噴鏀俱傛墍鏈夌殑澶栭儴I/O璇鋒眰閮藉凡緇撴潫鎴栧彇娑堛?/p>
鍏ュ弬錛?br>鏃?/p>
鍑哄弬錛?br>鏃?/p>
鎿嶄綔錛?br>寰堝皯鏈夎澶囦細璁劇疆IRP鐨剆tatus block涓篠TATUS_SUCCESS緇撴潫鍏抽棴璇鋒眰銆傞┍鍔ㄥ櫒濡備綍澶勭悊鍏抽棴璇鋒眰鍙栧喅浜庡叾璁捐銆傞氬父錛岄┍鍔ㄥ櫒鍦ㄦ敹鍒癐RP_MJ_CREATE鍚庝細undo鑷繁鐨勬搷浣滅粨鏋溿俤evice object涓篹xclusive鐨勯┍鍔ㄥ櫒錛屾瘮濡備覆琛岄┍鍔ㄥ櫒錛屽湪鏀跺埌璇ヨ姹傚悗涔熷彲鑳戒細reset紜歡銆?br>IRP_MJ_CLOSE涓嶆槸鍦ㄥ叧闂簡file object鍙ユ焺鐨勮繘紼嬩笂涓嬫枃涓彂閫佺殑銆傚鏋滈┍鍔ㄥ櫒蹇呴』閲婃斁榪涚▼鎸囧畾鐨勮祫婧愶紝姣斿椹卞姩鍣ㄤ箣鍓嶉攣瀹氭垨鏄犲皠鐨剈ser memeory絳夛紝灝變細瀵笽RP_MJ_CLEANUP璇鋒眰鍋氬悓鏍風殑鍝嶅簲銆?br>//------------------------------------------------------------------------------------------
IRP_MJ_CREATE
kernel-mode椹卞姩鍣ㄥ繀欏誨湪DispatchCreate鎴朌ispatchCreateClose涓彁鍑哄垱寤鴻姹傘?/p>
浣曟椂鍙戦侊細
鏀跺埌璇ヨ姹傛剰鍛崇潃user-mode淇濇姢鐨勫瓙緋葷粺錛堝彲鑳戒唬琛ㄧ殑鏄煇涓簲鐢ㄧ▼搴忥級錛岃姹備竴涓猣ile object鍙ユ焺錛岃灞騫朵唬琛ㄧ壒瀹氱殑鐩爣device object錛屾垨鑰呮槸杈冮珮綰у埆鐨勯┍鍔ㄥ櫒姝e湪榪炴帴鍣╠evice object鍒扮洰鏍嘾evice object銆?/p>
鍏ュ弬錛?br>鏃?/p>
鍑哄弬錛?br>鏃?/p>
鎿嶄綔錛?br>涓嶪RP_MJ_CLOSE綾諱技錛屽IRP_MJ_CREATE鐨勭浉搴斿彇鍐充笌椹卞姩鍣ㄧ殑璁捐錛屽緢灝戞湁椹卞姩鍣ㄤ細璁劇疆IRP鐨処/O status block涓篠TATUS_SUCCESS銆傚甫鏈塸ageable-image鍗曞厓鐨勯┍鍔ㄥ櫒錛屽儚緋葷粺涓茶椹卞姩鍣紝浼氶氳繃鏄犲皠鑷韓鐨刾age-out浠g爜錛屾潵涓洪偅浜涘皾璇曟墦寮璁懼榪涜I/O鎿嶄綔鐨剈ser-mode綰跨▼鎻愪緵璧勬簮銆?/p>
//------------------------------------------------------------------------------------------
IRP_MJ_DIRECTORY_CONTROL
浣曟椂鍙戦侊細
IRP_MJ_DIRECTORY_CONTROL璇鋒眰鏄敱I/O綆$悊鍣ㄥ拰鍏朵粬鎿嶄綔緋葷粺緇勪歡錛堟瘮濡俴ernel-mode椹卞姩鍣級鍙戦佺殑銆傚綋user-mode紼嬪簭璋冪敤ReadDirectoryChangesW銆丗indNextVolumeMountPoint鎴栬卥ernal-mode componenet璋冪敤ZwQueryDirectoryFile鏃訛紝浼氬彂閫佽璇鋒眰銆?/p>
鎿嶄綔錛氭枃浠剁郴緇熼┍鍔ㄥ櫒
鏂囦歡緋葷粺椹卞姩鍣ㄩ氳繃媯鏌ョ洃鎺х▼搴廲ode鏉ュ垽鏂垽鏂墽琛屽摢涓涓洰褰曟帶鍒舵搷浣溿傛湁鏁堢殑鐩戞帶紼嬪簭codes:
IRP_MN_NOTIFY_CHANGE_DIRECTORY
璇鋒眰鍛婄煡鐩綍鍙樻洿銆傞氬父鏂囦歡緋葷粺椹卞姩鍣ㄤ細灝嗘IRP鏀懼埌縐佹湁鐨勯槦鍒椾腑錛岃屼笉鏄珛鍗寵繘琛屾弧瓚寵璇鋒眰銆?褰撶洰褰曞彂鐢熷彉鏇存椂錛屾枃浠剁郴緇熼┍鍔ㄥ櫒鎵ц閫氱煡鐩綍鍙樻洿鎿嶄綔錛屽嚭闃燂紝緇撴潫璇RP銆?br>IRP_MN_QUERY_DIRECTORY
鐩綍鏌ヨ璇鋒眰銆傛秷鎭被鍨嬪洜鏂囦歡緋葷粺鑰屽紓錛岄氬父鍖呮嫭浠ヤ笅鍑犵錛?br>FileBothDirectoryInformation
FileDirectoryInformation
FileFullDirectoryInformation
FileIdBothDirectoryInformation
FileIdFullDirectoryInformation
FileNamesInformation
FileObjectIdInformation
FileReparsePointInformation
娉ㄦ剰錛欶ileQuotaInformation綾誨凡涓嶅啀浣跨敤錛岀敤IRP_MJ_QUERY_QUOTA浠f浛銆?br>鎵ц涔嬪悗錛岀粨鏉烮RP銆?/p>
鎿嶄綔錛氭枃浠剁郴緇熻繃婊ら┍鍔ㄥ櫒
榪囨護椹卞姩鍣ㄥ皢璇RP鍚戞爤涓婄殑涓嬩竴灞傞┍鍔ㄥ櫒浼犻掋?br>//------------------------------------------------------------------------------------------
IRP_MJ_QUERY_INFORMATION
浣曟椂鍙戦侊細
IRP_MJ_QUERY_INFORMATION璇鋒眰鐨勫彂閫佸拰IRP_MJ_DIRECTORY_CONTROL綾諱技錛屾槸鐢盜/O綆$悊鍣ㄥ拰鍏朵粬鎿嶄綔緋葷粺緇勪歡錛堟瘮濡俴ernel-mode椹卞姩鍣級鍙戦佺殑銆傝皟鐢℅etFileInformationByHandle鎴朲wQueryInformationFile鏃跺彂閫併?/p>
鎿嶄綔錛氭枃浠剁郴緇熼┍鍔ㄥ櫒
鏂囦歡緋葷粺椹卞姩鍣ㄦ彁鍙杅ile object淇℃伅騫惰繘琛岃В鏋愶紝鐢辨鍒ゆ柇鐢ㄦ埛鏄墦寮涓涓枃浠惰繕鏄墦寮涓涓洰褰曪紝榪欐牱錛岄┍鍔ㄥ櫒澶勭悊鏌ヨ騫剁粨鏉烮RP銆傚鏋滀笉鑳藉淇℃伅榪涜鎻愬彇瑙f瀽錛岄┍鍔ㄥ櫒緇撴潫IRP錛屼笉澶勭悊鏌ヨ銆?br>鍙緵鏌ヨ鐨勬枃浠跺拰鐩綍淇℃伅鍥犳枃浠剁郴緇熻屽紓錛岄氬父鍖呮嫭濡備笅鍑犵錛?br>FileAllInformation
FileAttributeTagInformation
FileBasicInformation
FileCompressionInformation
FileEaInformation
FileInternalInformation
FileNameInformation
FileNetworkOpenInformation
FilePositionInformation
FileStandardInformation
FileStreamInformation
ZwQueryInformationFile鏀寔FileAccessInformation, FileAlignmentInformation, 鍜?FileModeInformation 綾誨瀷錛岃屾棤闇鍚戞枃浠剁郴緇熷彂閫両RP_MJ_QUERY_INFORMATION璇鋒眰錛屽洜涓轟粬浠笌鏂囦歡緋葷粺鏃犲叧銆?/p>
鎿嶄綔錛氭枃浠剁郴緇熻繃婊ら┍鍔ㄥ櫒
榪囨護椹卞姩鍣ㄥ皢璇RP鍚戞爤涓婄殑涓嬩竴灞傞┍鍔ㄥ櫒浼犻掋?br>//------------------------------------------------------------------------------------------
IRP_MJ_QUERY_VOLUME_INFORMATION
浣曟椂鍙戦侊細
IRP_MJ_QUERY_VOLUME_INFORMATION璇鋒眰鐢盜/O綆$悊鍣ㄥ彂閫併傚綋user-mode紼嬪簭璋冪敤GetDiskFreeSpace鎴朑etFileType鏃朵細鍙戦佽璇鋒眰銆?/p>
鎿嶄綔錛氭枃浠剁郴緇熼┍鍔ㄥ櫒
鏂囦歡緋葷粺椹卞姩鍣ㄩ氳繃瀵筬ile object榪涜鎻愬彇鍜岃В鐮侊紝鍒ゆ柇鐩爣device object鏄笉鏄鏂囦歡緋葷粺鐨刢ontrol device object銆傚鏋滄槸錛屽茍涓旇姹傜殑鏄墦寮volume錛堟垨鑰呮墦寮volume涓婄殑object錛夛紝鏂囦歡緋葷粺椹卞姩鍣ㄤ細澶勭悊璇鋒眰騫剁粨鏉烮RP銆傚鏋滀笉鏄紝鏂囦歡緋葷粺椹卞姩鍣ㄦ煡璇㈠け璐ワ紝緇撴潫IRP銆?br>鍙緵鏌ヨ鐨剉olume淇℃伅綾誨瀷鍥犳枃浠剁郴緇熻屽紓錛岄氬父鏈夊涓嬪嚑縐嶇被鍨嬶細
FileFsAttributeInformation
FileFsDeviceInformation
FileFsSizeInformation
FileFsVolumeInformation
鎿嶄綔錛氭枃浠剁郴緇熻繃婊ら┍鍔ㄥ櫒
榪囨護椹卞姩鍣ㄥ皢璇RP鍚戞爤涓婄殑涓嬩竴灞傞┍鍔ㄥ櫒浼犻掋?br>//------------------------------------------------------------------------------------------
IRP_MJ_READ
鍚戠郴緇熶紶閫掓暟鎹殑椹卞姩鍣ㄥ繀欏誨湪DispatchRead鎴朌ispatchReadWrite涓寘鍚玶ead璇鋒眰錛屽湪姝ょ被椹卞姩鍣ㄤ笂鍒嗗眰鐨刪igher-level椹卞姩鍣ㄤ篃蹇呴』榪欐牱鍋氥?/p>
浣曟椂鍙戦侊細
鍦ㄥ畬鎴恈reate璇鋒眰鐨勪箣鍚庣殑鏃墮棿鍩熷唴鍙戦併?br>鍙兘鐢卞寘鍚玣ile object鍙ユ焺錛堜唬琛ㄨ姹傝繃浠庝粠璇evice浼犻掓暟鎹殑鐩爣device object錛夌殑user-mode紼嬪簭鎴杦in32緇勪歡鍙戦併備篃鍙兘鐢卞垱寤哄拰璁劇疆read IRP鐨刪igher-level椹卞姩鍣ㄥ彂閫併?/p>
鍏ュ弬錛?br>IRP涓殑椹卞姩鍣↖/O stack浣嶇疆鎸囩ずParameters.Read.Length.浼犻佸灝慴yte鏁版嵁銆?br>鏈変簺椹卞姩鍣ㄩ氳繃Parameters.Read.Key瀵瑰湪device queue鎴栭┍鍔ㄥ櫒綆$悊鐨処RP鍐呴儴闃熷垪涓read璇鋒眰榪涜鎺掑簭銆傛湁鐨勯┍鍔ㄥ櫒閫氳繃Parameters.Read.ByteOffset錛堟寚紺轟紶閫佹搷浣滅殑offset錛夎繘琛屾帓搴忋?/p>
鍑哄弬錛?br>鏍規嵁椹卞姩鍣ㄥdevice object Flag鐨勬槸DO_BUFFERED_IO榪樻槸DO_DIRECT_IO錛岄噰鐢ㄤ笉鍚岀殑鏂規硶浼犻掓暟鎹細
The buffer at Irp->AssociatedIrp.SystemBuffer if the driver uses buffered I/O
The buffer described by the MDL at Irp->MdlAddress if the underlying device driver uses direct I/O (DMA or PIO)
鎿嶄綔錛?br>鎺ユ敹鍒皉ead璇鋒眰涔嬪悗錛宧igher-level椹卞姩鍣ㄤ細閫氳繃涓簄ext-lower椹卞姩鍣ㄨ緗甀RP涓殑I/O stack浣嶇疆錛屾垨鑰呬負lower椹卞姩鍣ㄥ垱寤哄茍璁劇疆闄勫姞鐨処RP銆傚彲浠ヨ皟鐢↖oSetCompletionRoutine璁劇疆IoCompletion錛堝湪IRP杈撳叆涓槸鍙夌殑錛屼絾鍦╠river-created IRP鏄繀欏葷殑錛夈?br>鎺ユ敹鍒拌璇鋒眰涔嬪悗錛岄┍鍔ㄥ櫒灝嗗櫒device浼犻佺粰緋葷粺memory銆傜粨鏉烮RP鐨勮繃紼嬩腑錛岄┍鍔ㄥ櫒灝嗚緗甀/O stack block涓轟紶閫掔殑byte鏁伴噺銆?br>
//------------------------------------------------------------------------------------------
IRP_MJ_SET_INFORMATION
浣曟椂鍙戦侊細
IRP_MJ_SET_INFORMATION璇鋒眰鐨勫彂閫佸拰IRP_MJ_QUERY_INFORMATION銆両RP_MJ_DIRECTORY_CONTROL綾諱技錛屾槸鐢盜/O綆$悊鍣ㄥ拰鍏朵粬鎿嶄綔緋葷粺緇勪歡錛堟瘮濡俴ernel-mode椹卞姩鍣級鍙戦佺殑銆傝皟鐢⊿etEndOfFile鎴朲wSetInformationFile鏃跺彂閫併?/p>
鎿嶄綔錛氭枃浠剁郴緇熼┍鍔ㄥ櫒
鏂囦歡緋葷粺椹卞姩鍣ㄦ彁鍙杅ile object淇℃伅騫惰繘琛岃В鏋愶紝鐢辨鍒ゆ柇鐢ㄦ埛鏄墦寮涓涓枃浠惰繕鏄墦寮涓涓洰褰曪紝榪欐牱錛岄┍鍔ㄥ櫒澶勭悊鏌ヨ騫剁粨鏉烮RP銆?br>鍙緵璁劇疆鐨勬枃浠躲佺洰褰曞睘鎬т俊鎭涓嬶細
FileBasicInformation
FileDispositionInformation
FileLinkInformation (for file systems that allow cycles to be created in the directory hierarchy)
FilePositionInformation
FileRenameInformation
鏂囦歡涓撴湁灞炴э細
FileAllocationInformation
FileEndOfFileInformation
FileLinkInformation (for file systems, such as NTFS, that do not allow cycles to be created in the directory hierarchy)
FileValidDataLengthInformation
鎿嶄綔錛氭枃浠剁郴緇熻繃婊ら┍鍔ㄥ櫒
榪囨護椹卞姩鍣ㄥ皢璇RP鍚戞爤涓婄殑涓嬩竴灞傞┍鍔ㄥ櫒浼犻掋?br>//------------------------------------------------------------------------------------------
IRP_MJ_SET_INFORMATION*
IRP_MJ_SET_INFORMATION (Serial)
浣曟椂鍙戦侊細
client閫氳繃set information璇鋒眰鏀瑰彉涓茶璁懼涓婃墦寮鐨勬枃浠剁粨灝句綅緗椂鍙戦併?/p>
//------------------------------------------------------------------------------------------
IRP_MJ_WRITE
鍚戠郴緇熶紶閫掓暟鎹殑椹卞姩鍣ㄥ繀欏誨湪DispatchWrite鎴朌ispatchReadWrite涓寘鍚玾rite璇鋒眰錛屽湪姝ょ被椹卞姩鍣ㄤ笂鍒嗗眰鐨刪igher-level椹卞姩鍣ㄤ篃蹇呴』榪欐牱鍋氥?/p>
浣曟椂鍙戦侊細
鎴愬姛緇撴潫creat璇鋒眰鐨勬椂闂村煙鍐呫?br>鍙兘鐢卞寘鍚玣ile object鍙ユ焺錛堜唬琛ㄨ姹傝繃浠庝粠璇evice浼犻掓暟鎹殑鐩爣device object錛夌殑user-mode紼嬪簭鎴杦in32緇勪歡鍙戦併備篃鍙兘鐢卞垱寤哄拰璁劇疆write IRP鐨刪igher-level椹卞姩鍣ㄥ彂閫併?/p>
鍏ュ弬錛?br>IRP涓殑椹卞姩鍣↖/O stack浣嶇疆鎸囩ずParameters.Write.Length.浼犻佸灝慴yte鏁版嵁銆?br>鏈変簺椹卞姩鍣ㄩ氳繃Parameters.Write.Key瀵瑰湪device queue鎴栭┍鍔ㄥ櫒綆$悊鐨処RP鍐呴儴闃熷垪涓write璇鋒眰榪涜鎺掑簭銆傛湁鐨勯┍鍔ㄥ櫒閫氳繃Parameters.write.ByteOffset錛堟寚紺轟紶閫佹搷浣滅殑offset錛夎繘琛屾帓搴忋?br>鏍規嵁椹卞姩鍣ㄥdevice object Flag鐨勬槸DO_BUFFERED_IO榪樻槸DO_DIRECT_IO錛岄噰鐢ㄤ笉鍚岀殑鏂規硶浼犻掓暟鎹細
The buffer at Irp->AssociatedIrp.SystemBuffer, if the driver uses buffered I/O
The buffer described by the MDL at Irp->MdlAddress, if the underlying device driver uses direct I/O (DMA or PIO)
鍑哄弬錛?br>鏃?/p>
鎿嶄綔錛?br>鎺ユ敹鍒皐rite璇鋒眰涔嬪悗錛宧igher-level椹卞姩鍣ㄤ細閫氳繃涓簄ext-lower椹卞姩鍣ㄨ緗甀RP涓殑I/O stack浣嶇疆錛屾垨鑰呬負lower椹卞姩鍣ㄥ垱寤哄茍璁劇疆闄勫姞鐨処RP銆傚彲浠ヨ皟鐢↖oSetCompletionRoutine璁劇疆IoCompletion錛堝湪IRP杈撳叆涓槸鍙夌殑錛屼絾鍦╠river-created IRP鏄繀欏葷殑錛夈備箣鍚庯紝椹卞姩鍣ㄩ氳繃IoCallDriver浼犻掕姹傜粰next-lower椹卞姩鍣ㄣ?br>鎺ユ敹鍒拌璇鋒眰涔嬪悗錛岄┍鍔ㄥ櫒灝嗘暟鎹粠緋葷粺memory浼犻掑埌鑷韓鐨刣evice銆傜粨鏉烮RP鐨勮繃紼嬩腑錛岄┍鍔ㄥ櫒灝嗚緗甀/O stack block涓轟紶閫掔殑byte鏁伴噺銆?
//------------------------------------------------------------------------------------------
IRP_MJ_WRITE*
鍒嗘鍐欏叆錛屾彁渚汷ffset錛屾瘡嬈″啓鍏?5536瀛楄妭銆?br>