锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
__finally Begins a block of code that is executed whenever the flow of control leaves its associated __try block.
__leave Allows for immediate termination of the __try block without causing abnormal termination and its performance penalty.
]]>
1. DriverEntry
涓棿灞傞┍鍔ㄥ涓婂眰鏉ヨ錛屾壆婕斾竴涓?/span>Miniport Driver鐨勮鑹詫紝瀹冨湪涓婅竟娌垮悜NDIS娉ㄥ唽涓緇?/span>Miniportxxx鍑芥暟錛涘浜庝笅灞?/span>Miniport Driver鏉ヨ錛屼腑闂村眰椹卞姩鎵紨涓涓?/span>Protocol Driver鐨勮鑹詫紝鍥犳瀹冨湪涓嬭竟娌垮悜NDIS娉ㄥ唽涓緇?/span>Protocolxxx鍑芥暟銆?/span>Miniport Driver閫氳繃璋冪敤NdisMRegisterMiniport鍚?/span>NDIS娉ㄥ唽涓緇?/span>MiniportXxx鍑芥暟錛?/span>Protocol Driver 閫氳繃璋冪敤 NdisRegisterProtocol鍚?/span>NDIS娉ㄥ唽涓緇?/span>ProtocolXxx鍑芥暟銆?/span>
棣栧厛閫氳繃璋冪敤NdisMInitializeWrapper(&NdisWrapperHandle, DriverObject, RegistryPath, NULL);鏉ュ垵濮嬪寲NdisWrapperHandle錛岃鍙ユ焺鐢ㄦ潵浠h〃IM Driver鐨勮嚜韜?/span>
鎺ョ潃璋冪敤NdisIMRegisterLayeredMiniport鏉ュ悜NDIS娉ㄥ唽涓緇?/span>MiniportXxx鍑芥暟錛岃繑鍥炴寚鍚?/span>Miniport鐨?/span>DriverHandle銆?/span>
闅忓悗璋冪敤NdisRegisterProtocol鏉ュ悜NDIS娉ㄥ唽涓緇?/span>Protocolxxx鍑芥暟錛岃繑鍥炴寚鍚?/span>Protocol鐨?/span>ProtHandle銆?/span>
鐒跺悗璋冪敤NdisIMAssociateMiniport(DriverHandle, ProtHandle);灝嗕袱鑰呯粦瀹氥?/span>
2. PtBindAdapter
NDIS鍦ㄥ畬鎴愮涓姝ヤ箣鍚庯紝灝嗕細璋冪敤PtBindAdapter鏉ュ畬鎴愬閫傞厤鍣ㄧ殑緇戝畾錛堟敞鎰忥細姝ゅ嚱鏁扮殑璋冪敤嬈℃暟鏄牴鎹敤鎴風數鑴戜笂鐨勯傞厤鍣ㄦ暟鐩屽畾鐨勶紝涓鑸嚦灝戞湁涓ゅ潡錛屼細鏈変竴鍧楀彨NDISWANIP錛夛紝PtBindAdapter涓湁鐢ㄧ殑鍙傛暟涓昏鏄?/span>DeviceName鍜?/span>SystemSpecific1,鍏朵腑DeviceName鏄笅灞?/span>NIC椹卞姩鐨勬湇鍔″悕錛?/span>SystemSpecific1鍙互鐢ㄦ潵璇誨彇娉ㄥ唽琛ㄤ腑鐩稿叧鐨勫箋傦紙鍙傝冩敞鍐岃〃HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage涓嬬殑Bind瀛愰敭鍊鹼級
棣栧厛璋冪敤NdisOpenProtocolConfiguration 錛?/span>NdisReadConfiguration鏉ヨ鍙栨敞鍐岃〃淇℃伅錛岀劧鍚庡垵濮嬪寲PADAPT pAdapt緇撴瀯浣撱?/span>
鎺ョ潃璋冪敤NdisOpenAdapter鏉ュ皢IM鐨勪笅灞傚崗璁┍鍔紙ProtHandle錛夌粦瀹氶傞厤鍣ㄣ?/span>
璋冪敤NdisIMInitializeDeviceInstanceEx鏉ヨЕ鍙戝MPInitialize鐨勮皟鐢?/span>
3. MPInitialize
鍦?/span>MpInitialize閲岄潰涓昏鍋氫笁浠朵簨鎯咃細
1). 鍒ゆ柇浠嬭川綾誨瀷
2). 璋冪敤NdisMSetAttributesEx璁劇疆涓浜涚壒鎬?/span>
3). 璋冪敤PtRegisterDevice鍑芥暟鍚?/span>NDIS娉ㄥ唽璁懼
4. PtRegisterDevice
鍦?/span>PtRegisterDevice閲岋紝涓昏鏄緗?/span>IM Driver鑷繁瑕佸鐞嗙殑涓浜涙淳閬d緥紼嬪拰娉ㄥ唽璁懼鍚嶅拰璁懼絎﹀彿閾炬帴鍚嶃傝娉ㄦ剰鐨勬槸錛岃繖涓嚱鏁版彁渚涚殑鍔熻兘鏄負鏁翠釜璁懼鏈嶅姟鑰屼笉鏄瘡涓傞厤鍣ㄩ兘闇瑕佹敞鍐岋紝鎵浠ラ氳繃涓涓叏灞鍙橀噺MiniportCount鏉ユ帶鍒躲?/span>
鍦ㄨ繖閲岋紝瀹氫箟浜?/span> DispatchTable[IRP_MJ_MAXIMUM_FUNCTION+1];
[IRP_MJ_CREATE] = DevOpen;… 鎺ョ潃璋冪敤鏉?/span>娉ㄥ唽璁懼鍚嶅拰璁懼絎﹀彿閾炬帴鍚嶃?/span>
浜岋紟鍗歌澆榪囩▼
1. PtUnbindAdapter
閽堝姣忎釜緇戝畾鐨勯傞厤鍣紝棣栧厛鏌ョ湅瀵?/span>IM鐨?/span>miniport鏄惁鏈夎繕鍦ㄦ帓闃熺殑璇鋒眰錛屽鏋滄湁錛屽垯鍏堣皟鐢?/span>瀹屾垚瀹冿紙榪斿洖NDIS_STATUS_FAILURE錛夛紝鐒跺悗鏌ョ湅鐘舵佹槸鍚︿負pending錛屾槸鐨勮瘽鍒欒皟鐢?/span>NdisIMCancelInitializeDeviceInstance銆傚啀璋冪敤NdisIMDeInitializeDeviceInstance鏉ュ嵏杞借澶囷紝鍦ㄦ浼氳Е鍙戝MPHalt鐨勮皟鐢ㄣ?/span>
2. MPHalt
鍦?/span>MPHalt閲岋紝棣栧厛璋冪敤PtDeregisterDevice鏉ュ嵏杞借澶囷紝鐒跺悗璋冪敤NdisCloseAdapter鍏抽棴緇戝畾鐨勯傞厤鍣ㄣ?/span>
3. PtDeregisterDevice (MiniportCount == 0?)
鍦?/span>PtDeregisterDevice 閲岋紝璋冪敤NdisMDeregisterDevice鏉ュ嵏杞借澶囥傚悓PtRegisterDevice綾諱技錛岃娉ㄦ剰鐨勬槸錛岃繖涓嚱鏁版彁渚涚殑鍔熻兘鏄負鏁翠釜璁懼鏈嶅姟鑰屼笉鏄瘡涓傞厤鍣ㄩ兘闇瑕佹敞鍐岋紝鎵浠ラ氳繃涓涓叏灞鍙橀噺MiniportCount鏉ユ帶鍒躲傚彧鏈夋渶鍚庝竴涓粦瀹氱殑閫傞厤鍣ㄥ嵏杞芥椂錛屾墠璋冪敤NdisMDeregisterDevice銆?/span>
4. PtUnloadProtocol
鍦?/span>CloseAdapterComplete瀹屾垚鍚庯紝NDIS浼氳皟鐢?/span>PtUnloadProtocol鏉ュ畬鎴愪笅灞傜粦瀹氱殑鍗忚椹卞姩錛?/span>錛夌殑鍗歌澆錛岃皟鐢?span lang=EN-US>NdisDeregisterProtocol鍑芥暟銆?/span>
5. PtUnload
棣栧厛錛岃璇存槑鐨勬槸錛屽湪DriverEntry鍑芥暟閲岋紝鏈夋敞鍐岃鍑芥暟錛?/span>NdisMRegisterUnloadHandler(NdisWrapperHandle, PtUnload);錛夈傝鍑芥暟鏄暣涓嵏杞借繃紼嬬殑鏈鍚庝竴姝ワ紝鍦ㄨ繖閲岋紝浼氱戶緇畬鎴愬緇戝畾鐨勪笂灞?/span>miniport錛屼笅灞傜殑protocol鐨勫嵏杞斤紙鍏跺疄protocol鐨勫嵏杞藉湪絎?/span>4姝ュ凡緇忓畬鎴愶級錛岃皟鐢ㄥ涓嬩袱涓嚱鏁?/span>PtUnloadProtocol錛?/span>NdisIMDeregisterLayeredMiniport銆?/span>