监听以太网(二) Packet32包说明
生活随笔
收集整理的這篇文章主要介紹了
监听以太网(二) Packet32包说明
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Packet32包中的函數(shù)說(shuō)明:?
No.2. PacketOpenAdapter (打開網(wǎng)卡)?
根據(jù)傳入的設(shè)備名,打開它。?
LPADAPTER PacketOpenAdapter(?
LPTSTR AdapterName?
);?
Parameters:?
AdapterName: [in] 要打開的設(shè)備的名字。?
Return Values:?
如果打開成功,返回一個(gè)指針,它指向一個(gè)正確初始化了的ADAPTER Object。否則,返回NULL。?
Usage:?
[C/C++]?
C/C++ Usage Sample?
LPADAPTER adapter;?
adapter = PacketOpenAdapter(pStr+rewind);?
Remarks:?
這個(gè)函數(shù)嘗試加載并啟動(dòng)packet driver,這樣,管理driver對(duì)于應(yīng)用程序來(lái)說(shuō)就十分的透明了。?
Windows9X版本的NPF driver用的是ASCII編碼,而WindowsNTx用的是Unicode編碼。所以提請(qǐng)注意這個(gè)輸入?yún)?shù)AdapterName,在Windows9X下,必須是正確的編碼格式!在WindowsNTx下,這個(gè)函數(shù)能夠監(jiān)測(cè)到ASCII編碼,并在送給driver 之前先轉(zhuǎn)換為Unicode編碼。 這個(gè)函數(shù)的操作大致為:?
首先調(diào)用OpenSCManager,以Administrators的身份連接Service Control Manager,權(quán)限是SC_MANAGER_ALL_ACCESS。這也說(shuō)明,使用Packet.dll你必須是本機(jī)管理員組成員。?
如果可以連接SCM,檢查NPF注冊(cè)表項(xiàng)是否存在。?
如果存在,說(shuō)明driver已經(jīng)安裝了,就不需要我們調(diào)用PacketInstallDriver了。 NPF注冊(cè)表項(xiàng):?
HKEY_LOCAL_MACHINE/?
SYSTEM/?
CurrentControlSet/?
Services/?
NPF?
如果不存在此鍵,則調(diào)用PacketInstallDriver安裝當(dāng)前路徑下的 driver:npf.sys。?
如果這次PacketInstallDriver安裝也失敗了,就到系統(tǒng)路徑下查找并安裝這個(gè)驅(qū)動(dòng)。?
如果以上操作都成功的話,調(diào)用OpenService打開NPF服務(wù)。如果服務(wù)存在的話,就調(diào)用QueryServiceStatus查詢當(dāng)前服務(wù)狀態(tài)。這就是我們的driver的狀態(tài)。?
如果這個(gè)服務(wù)沒有啟動(dòng),就調(diào)用StartService啟動(dòng)之。?
確認(rèn)服務(wù)啟動(dòng)之后,檢查AdapterName是否是ASCII編碼,是的話,就轉(zhuǎn)換為Unicode。?
由于一般輸入?yún)?shù)AdapterNAme類似于這樣:?
/Device/NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}?
所以,我們會(huì)重新組織一個(gè)設(shè)備名SymbolicLink: “Packet_”的前綴 + AdapterName[8] 也就是: //./Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}?
先嘗試著CreateFile函數(shù)能不能馬上用這個(gè)SymbolicLink名字打開設(shè)備。?
如果可以,就調(diào)用PacketSetReadEvt函數(shù)打開一個(gè)open事件等。?
否則,調(diào)用DefineDosDevice定義一個(gè)新的MS-DOS設(shè)備:?
名字類似于” Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}”。?
通過這個(gè)DOS設(shè)備名,我們的應(yīng)用層程序才能向驅(qū)動(dòng)發(fā)出請(qǐng)求。接著,調(diào)用CreateFile函數(shù)來(lái)建立并打開一個(gè)聯(lián)系設(shè)備的文件句柄(GENERIC_WRITE| GENERIC_READ,OPEN_EXISTING)。之后,調(diào)用PacketSetReadEvt函數(shù)打開一個(gè)open事件等。?
No.2. PacketOpenAdapter (打開網(wǎng)卡)?
根據(jù)傳入的設(shè)備名,打開它。?
LPADAPTER PacketOpenAdapter(?
LPTSTR AdapterName?
);?
Parameters:?
AdapterName: [in] 要打開的設(shè)備的名字。?
Return Values:?
如果打開成功,返回一個(gè)指針,它指向一個(gè)正確初始化了的ADAPTER Object。否則,返回NULL。?
Usage:?
[C/C++]?
C/C++ Usage Sample?
LPADAPTER adapter;?
adapter = PacketOpenAdapter(pStr+rewind);?
Remarks:?
這個(gè)函數(shù)嘗試加載并啟動(dòng)packet driver,這樣,管理driver對(duì)于應(yīng)用程序來(lái)說(shuō)就十分的透明了。?
Windows9X版本的NPF driver用的是ASCII編碼,而WindowsNTx用的是Unicode編碼。所以提請(qǐng)注意這個(gè)輸入?yún)?shù)AdapterName,在Windows9X下,必須是正確的編碼格式!在WindowsNTx下,這個(gè)函數(shù)能夠監(jiān)測(cè)到ASCII編碼,并在送給driver 之前先轉(zhuǎn)換為Unicode編碼。 這個(gè)函數(shù)的操作大致為:?
首先調(diào)用OpenSCManager,以Administrators的身份連接Service Control Manager,權(quán)限是SC_MANAGER_ALL_ACCESS。這也說(shuō)明,使用Packet.dll你必須是本機(jī)管理員組成員。?
如果可以連接SCM,檢查NPF注冊(cè)表項(xiàng)是否存在。?
如果存在,說(shuō)明driver已經(jīng)安裝了,就不需要我們調(diào)用PacketInstallDriver了。 NPF注冊(cè)表項(xiàng):?
HKEY_LOCAL_MACHINE/?
SYSTEM/?
CurrentControlSet/?
Services/?
NPF?
如果不存在此鍵,則調(diào)用PacketInstallDriver安裝當(dāng)前路徑下的 driver:npf.sys。?
如果這次PacketInstallDriver安裝也失敗了,就到系統(tǒng)路徑下查找并安裝這個(gè)驅(qū)動(dòng)。?
如果以上操作都成功的話,調(diào)用OpenService打開NPF服務(wù)。如果服務(wù)存在的話,就調(diào)用QueryServiceStatus查詢當(dāng)前服務(wù)狀態(tài)。這就是我們的driver的狀態(tài)。?
如果這個(gè)服務(wù)沒有啟動(dòng),就調(diào)用StartService啟動(dòng)之。?
確認(rèn)服務(wù)啟動(dòng)之后,檢查AdapterName是否是ASCII編碼,是的話,就轉(zhuǎn)換為Unicode。?
由于一般輸入?yún)?shù)AdapterNAme類似于這樣:?
/Device/NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}?
所以,我們會(huì)重新組織一個(gè)設(shè)備名SymbolicLink: “Packet_”的前綴 + AdapterName[8] 也就是: //./Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}?
先嘗試著CreateFile函數(shù)能不能馬上用這個(gè)SymbolicLink名字打開設(shè)備。?
如果可以,就調(diào)用PacketSetReadEvt函數(shù)打開一個(gè)open事件等。?
否則,調(diào)用DefineDosDevice定義一個(gè)新的MS-DOS設(shè)備:?
名字類似于” Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}”。?
通過這個(gè)DOS設(shè)備名,我們的應(yīng)用層程序才能向驅(qū)動(dòng)發(fā)出請(qǐng)求。接著,調(diào)用CreateFile函數(shù)來(lái)建立并打開一個(gè)聯(lián)系設(shè)備的文件句柄(GENERIC_WRITE| GENERIC_READ,OPEN_EXISTING)。之后,調(diào)用PacketSetReadEvt函數(shù)打開一個(gè)open事件等。?
總結(jié)
以上是生活随笔為你收集整理的监听以太网(二) Packet32包说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 监听以太网(一) Packet32包说明
- 下一篇: 监听以太网(三) Packet32数据结