程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 監聽以太網(2) Packet32包說明續

監聽以太網(2) Packet32包說明續

編輯:關於VC++

Packet32包中的函數說明:

No.2.PacketOpenAdapter (打開網卡)

根據傳入的設備名,打開它。

LPADAPTER PacketOpenAdapter(
LPTSTR AdapterName
);

Parameters:

AdapterName:

[in] 要打開的設備的名字。

Return Values:

如果打開成功,返回一個指針,它指向一個正確初始化了的ADAPTER Object。

否則,返回NULL。

Usage:

[C/C++]

C/C++ Usage Sample

LPADAPTER   adapter;

adapter = PacketOpenAdapter(pStr+rewind);

Remarks:

這個函數嘗試加載並啟動packet driver,這樣,管理driver對於應用程序來說就十分的透明了。

Windows9X版本的NPF driver用的是ASCII編碼,而WindowsNTx用的是Unicode編碼。所以提請注意這個輸入參數AdapterName,在Windows9X下,必須是正確的編碼格式!在WindowsNTx下,這個函數能夠監測到ASCII編碼,並在送給driver 之前先轉換為Unicode編碼。

這個函數的操作大致為:

首先調用OpenSCManager,以Administrators的身份連接Service Control Manager,權限是SC_MANAGER_ALL_ACCESS。這也說明,使用Packet.dll你必須是本機管理員組成員。

如果可以連接SCM,檢查NPF注冊表項是否存在。如果存在,說明driver已經安裝了,就不需要我們調用PacketInstallDriver了。

NPF注冊表項:

HKEY_LOCAL_MACHINE\

SYSTEM\

CurrentControlSet\

Services\

NPF

如果不存在此鍵,則調用PacketInstallDriver安裝當前路徑下的driver:npf.sys。

如果這次PacketInstallDriver安裝也失敗了,就到系統路徑下查找並安裝這個驅動。

如果以上操作都成功的話,調用OpenService打開NPF服務。如果服務存在的話,就調用QueryServiceStatus查詢當前服務狀態。這就是我們的driver的狀態。

如果這個服務沒有啟動,就調用StartService啟動之。

確認服務啟動之後,檢查AdapterName是否是ASCII編碼,是的話,就轉換為Unicode。

由於一般輸入參數AdapterNAme類似於這樣:

\Device\NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}

所以,我們會重新組織一個設備名SymbolicLink:

“Packet_”的前綴 + AdapterName[8]

也就是:

\\.\Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}

先嘗試著CreateFile函數能不能馬上用這個SymbolicLink名字打開設備。

如果可以,就調用PacketSetReadEvt函數打開一個open事件等。

否則,調用DefineDosDevice定義一個新的MS-DOS設備:

名字類似於” Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}”。

通過這個DOS設備名,我們的應用層程序才能向驅動發出請求。

接著,調用CreateFile函數來建立並打開一個聯系設備的文件句柄(GENERIC_WRITE| GENERIC_READ,OPEN_EXISTING)。

之後,調用PacketSetReadEvt函數打開一個open事件等。

(To be continued)

Writen by [email protected]

本文檔所包含的信息代表了在發布之日,ZhengYun 對所討論問題的當前看法,Zhengyun 不保證所給信息在發布之日以後的准確性。

本文檔僅供參考。對本文檔中的信息,Zhengyun 不做任何明示或默示的保證。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved