windows網(wǎng)絡(luò)編程第7章_第1頁
windows網(wǎng)絡(luò)編程第7章_第2頁
windows網(wǎng)絡(luò)編程第7章_第3頁
windows網(wǎng)絡(luò)編程第7章_第4頁
windows網(wǎng)絡(luò)編程第7章_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 第第7章章 NetBIOS網(wǎng)絡(luò)編程技術(shù)網(wǎng)絡(luò)編程技術(shù) NetBIOSNetBIOS(NETwork Basic NETwork Basic Input/Output SystemInput/Output System,網(wǎng),網(wǎng) 絡(luò)基本輸入絡(luò)基本輸入/ /輸出系統(tǒng))定輸出系統(tǒng))定 義了一種軟件接口以及在義了一種軟件接口以及在 應(yīng)用程序和連接介質(zhì)之間應(yīng)用程序和連接介質(zhì)之間 提供通信接口的標準方法提供通信接口的標準方法 。它可以提供名字服務(wù)、。它可以提供名字服務(wù)、 會話服務(wù)和數(shù)據(jù)庫服務(wù),會話服務(wù)和數(shù)據(jù)庫服務(wù), 基于基于NetBIOSNetBIOS的比較典型的的比較典型的 應(yīng)用是獲取遠程計算機的應(yīng)用是獲

2、取遠程計算機的 MacMac地址、名稱和所在工作地址、名稱和所在工作 組等信息。本章將對組等信息。本章將對 NetBIOSNetBIOS網(wǎng)絡(luò)編程技術(shù)進行網(wǎng)絡(luò)編程技術(shù)進行 介紹。介紹。 本章知識點本章知識點 7.1 NetBIOS7.1 NetBIOS協(xié)議及應(yīng)用協(xié)議及應(yīng)用 7.2 NetBIOS7.2 NetBIOS開發(fā)接口開發(fā)接口 7.3 7.3 在程序中實現(xiàn)在程序中實現(xiàn)NBTSTATNBTSTAT命令的功能命令的功能 7.1 NetBIOS協(xié)議及應(yīng)用協(xié)議及應(yīng)用 7.1.1 NetBIOS7.1.1 NetBIOS協(xié)議協(xié)議 7.1.2 7.1.2 使用使用NBTSTATNBTSTAT命令命令

3、7.1.1 NetBIOS協(xié)議協(xié)議 pNetBIOS協(xié)議最初由協(xié)議最初由IBM開發(fā),微軟公司在此基礎(chǔ)上開發(fā),微軟公司在此基礎(chǔ)上 對該協(xié)議進行了完善,并在對該協(xié)議進行了完善,并在Windows上提供了對上提供了對 NetBIOS協(xié)議的支持。網(wǎng)絡(luò)鄰居功能就是基于協(xié)議的支持。網(wǎng)絡(luò)鄰居功能就是基于 NetBIOS協(xié)議的。在協(xié)議的。在Windows中安裝中安裝TCP/IP協(xié)議的協(xié)議的 同時就會安裝同時就會安裝NetBIOS協(xié)議。下面介紹一下在協(xié)議。下面介紹一下在 Windows 2003中啟用和配置中啟用和配置NetBIOS協(xié)議的方法。協(xié)議的方法。 配置配置NetBIOS p 右鍵單擊桌面上的網(wǎng)上鄰居圖

4、標,在彈出菜單中選擇右鍵單擊桌面上的網(wǎng)上鄰居圖標,在彈出菜單中選擇“屬性屬性”, 打開打開“網(wǎng)絡(luò)和共享中心網(wǎng)絡(luò)和共享中心”窗口。窗口。 p 單擊單擊 左上方的左上方的“更改適配器設(shè)置更改適配器設(shè)置”,網(wǎng)絡(luò)連接,網(wǎng)絡(luò)連接”窗口。窗口。 “本地連接屬性本地連接屬性”對話框?qū)υ捒?p右鍵單擊右鍵單擊“本地本地 連接連接”圖標,在圖標,在 彈出菜單中選擇彈出菜單中選擇 “屬性屬性”,打開,打開 “本地連接屬性本地連接屬性 ”對話框,如圖對話框,如圖 7.37.3所示。如果所示。如果 沒有安裝沒有安裝TCP/IPTCP/IP ,則選中,則選中 “InternetInternet協(xié)議協(xié)議 版本版本4”4”

5、。 配置配置NetBIOS p 選中選中“InternetInternet協(xié)議版本協(xié)議版本4 4”項,單擊項,單擊“屬性屬性”按鈕,打開按鈕,打開 “InternetInternet協(xié)議(協(xié)議(TCP/IPTCP/IP)屬性)屬性”對話框?qū)υ捒颉?p 單擊單擊“高級高級”按鈕,打開按鈕,打開“高級高級TCP/IPTCP/IP設(shè)置設(shè)置”對話框。單擊對話框。單擊 “WINSWINS”選項卡,可以對選項卡,可以對NetBIOSNetBIOS協(xié)議進行設(shè)置協(xié)議進行設(shè)置。 1LANA編號編號 LANALANA(LAN AdapterLAN Adapter,LANLAN適配器)編號是適配器)編號是NetBI

6、OSNetBIOS進行網(wǎng)絡(luò)編程的關(guān)鍵進行網(wǎng)絡(luò)編程的關(guān)鍵 ,它對應(yīng)于網(wǎng)卡及傳輸協(xié)議的唯一組合。例如,假定某個工作站安,它對應(yīng)于網(wǎng)卡及傳輸協(xié)議的唯一組合。例如,假定某個工作站安 裝了兩塊網(wǎng)卡,以及兩種具有裝了兩塊網(wǎng)卡,以及兩種具有NetBIOSNetBIOS能力的傳輸協(xié)議(例如能力的傳輸協(xié)議(例如TCP/IPTCP/IP 和和NetBEUINetBEUI),那么將共有下面),那么將共有下面4 4個個LANALANA編號:編號: p 表示表示“TCP/IPTCP/IP網(wǎng)卡網(wǎng)卡1 1”對。對。 p 表示表示“NetBEUINetBEUI網(wǎng)卡網(wǎng)卡1 1”對。對。 p 表示表示“TCP/IPTCP/IP網(wǎng)

7、卡網(wǎng)卡2 2”對。對。 p 表示表示“NetBEUINetBEUI網(wǎng)卡網(wǎng)卡2 2”對。對。 2名字服務(wù)名字服務(wù) NetBIOSNetBIOS協(xié)議支持建立名字服務(wù)器,負責(zé)查找協(xié)議支持建立名字服務(wù)器,負責(zé)查找 目標主機對應(yīng)的目標主機對應(yīng)的IPIP地址,并賦予一個地址,并賦予一個 NetBIOSNetBIOS名稱。名字服務(wù)提供的主要功能如名稱。名字服務(wù)提供的主要功能如 下:下: p添加名字,即注冊一個添加名字,即注冊一個NetBIOSNetBIOS名字。名字。 p添加組名,即注冊一個添加組名,即注冊一個NetBIOSNetBIOS組名。組名。 p刪除名字,即取消一個刪除名字,即取消一個NetBIOS

8、NetBIOS名字和組名名字和組名 的注冊。的注冊。 p查詢名字,即在網(wǎng)絡(luò)中搜索查詢名字,即在網(wǎng)絡(luò)中搜索NetBIOSNetBIOS名字。名字。 3會話服務(wù)會話服務(wù) 會話服務(wù)提供的主要功能如下:會話服務(wù)提供的主要功能如下: p 調(diào)用,即打開一個到遠程調(diào)用,即打開一個到遠程NetBIOSNetBIOS名字的會話。名字的會話。 p 偵聽,即偵聽其他程序的連接請求。偵聽,即偵聽其他程序的連接請求。 p 掛起,即關(guān)閉一個會話。掛起,即關(guān)閉一個會話。 p 發(fā)送,即向會話對端的計算機發(fā)送一個數(shù)據(jù)包,并等待對方確認發(fā)送,即向會話對端的計算機發(fā)送一個數(shù)據(jù)包,并等待對方確認 。 p 無確認發(fā)送,即向會話對端的計

9、算機發(fā)送一個數(shù)據(jù)包,但不需要無確認發(fā)送,即向會話對端的計算機發(fā)送一個數(shù)據(jù)包,但不需要 對方確認。對方確認。 p 接收,即等待從會話對端發(fā)送的數(shù)據(jù)包到達。接收,即等待從會話對端發(fā)送的數(shù)據(jù)包到達。 4數(shù)據(jù)報服務(wù)數(shù)據(jù)報服務(wù) 數(shù)據(jù)報服務(wù)提供的主要功能如下:數(shù)據(jù)報服務(wù)提供的主要功能如下: p 發(fā)送數(shù)據(jù)報,即向遠程發(fā)送數(shù)據(jù)報,即向遠程NetBIOSNetBIOS名字發(fā)送一個數(shù)據(jù)報。名字發(fā)送一個數(shù)據(jù)報。 p 發(fā)送廣播數(shù)據(jù)報,即向網(wǎng)絡(luò)中所有發(fā)送廣播數(shù)據(jù)報,即向網(wǎng)絡(luò)中所有NetBIOSNetBIOS名字發(fā)送數(shù)據(jù)報。名字發(fā)送數(shù)據(jù)報。 p 接收數(shù)據(jù)報,即等待從發(fā)送數(shù)據(jù)報操作中到達的數(shù)據(jù)。接收數(shù)據(jù)報,即等待從發(fā)送數(shù)據(jù)

10、報操作中到達的數(shù)據(jù)。 p 接收廣播數(shù)據(jù)報,即等待從發(fā)送廣播數(shù)據(jù)報操作中到達的數(shù)據(jù)接收廣播數(shù)據(jù)報,即等待從發(fā)送廣播數(shù)據(jù)報操作中到達的數(shù)據(jù) 。 在在WindowsWindows中,如果安裝了中,如果安裝了NetBIOSNetBIOS協(xié)議,則系統(tǒng)將自動開放下列協(xié)議,則系統(tǒng)將自動開放下列 端口:端口: p 137137端口,主要作用是在局域網(wǎng)中提供計算機的名稱或端口,主要作用是在局域網(wǎng)中提供計算機的名稱或IPIP地址地址 查詢服務(wù)。查詢服務(wù)。 p 138138端口,主要作用是提供端口,主要作用是提供NetBIOSNetBIOS環(huán)境下的計算機名瀏覽功能環(huán)境下的計算機名瀏覽功能 。 p 139139端口,

11、主要作用是提供文件和打印機共享的功能。端口,主要作用是提供文件和打印機共享的功能。 7.1.2 使用使用NBTSTAT命令命令 p 在在WindowsWindows命令窗口中執(zhí)行命令窗口中執(zhí)行NBTSTATNBTSTAT命令,可以獲取指命令,可以獲取指 定遠程計算機的基本信息,包括定遠程計算機的基本信息,包括MacMac地址、計算機名和地址、計算機名和 所屬工作組等。所屬工作組等。NBTSTATNBTSTAT命令的格式如下:命令的格式如下: NBTSTAT -a RemoteName -A IP address -c -NBTSTAT -a RemoteName -A IP address -

12、c - nn -r -R -RR -s -S interval -r -R -RR -s -S interval NBTSTAT參數(shù)的具體說明參數(shù)的具體說明 參參 數(shù)數(shù)說說 明明 -a RemoteName列出指定名稱的遠程機器的名稱表,RemoteName表示指定的遠程主機計算機 名 -A IP address列出指定 IP 地址的遠程機器的名稱表,IP address表示用點分法表示的IP 地址 -c列出遠程計算機名稱及其IP地址的 NBT 緩存 -n列出本地的NetBIOS名稱 -r列出通過廣播和經(jīng)由WINS解析的名稱 -R清除和重新加載遠程緩存名稱表 -RR將名稱釋放包發(fā)送到WINS,

13、然后啟動刷新 -s列出將目標IP地址轉(zhuǎn)換成計算機NetBIOS名稱的會話表 -S列出具有目標IP地址的會話表 interval重新顯示選定的統(tǒng)計、每次顯示之間暫停的間隔秒數(shù)。按Ctrl+C停止重新顯 示統(tǒng)計 實例實例 p NBTSTAT -a 192.168.1.102NBTSTAT -a 192.168.1.102 p NBTSTAT -a home-pcNBTSTAT -a home-pc 7.2 NetBIOS開發(fā)接口開發(fā)接口 7.2.1 NetBIOS7.2.1 NetBIOS操作操作 7.2.2 NCB7.2.2 NCB結(jié)構(gòu)體結(jié)構(gòu)體 7.2.3 7.2.3 其他常用其他常用NetBI

14、OSNetBIOS結(jié)構(gòu)體結(jié)構(gòu)體 7.2.4 Netbios()7.2.4 Netbios()函數(shù)函數(shù) 7.2.5 7.2.5 獲取獲取LANALANA上的所有上的所有NetBIOSNetBIOS名字名字 7.2.6 7.2.6 獲取網(wǎng)絡(luò)適配器上的獲取網(wǎng)絡(luò)適配器上的MACMAC地址地址 7.2.1 NetBIOS操作操作 p 協(xié)議驅(qū)動程序?qū)ν夤紖f(xié)議驅(qū)動程序?qū)ν夤?NetBIOSNetBIOS接口,并將接口,并將NetBIOSNetBIOS 命令映射到協(xié)議驅(qū)動程序的命令映射到協(xié)議驅(qū)動程序的 內(nèi)部命令。內(nèi)部命令。NetBIOSNetBIOS模擬器模擬器 接收接收NetBIOSNetBIOS命令,

15、將它們命令,將它們 轉(zhuǎn)換成轉(zhuǎn)換成TDITDI(Transport Transport Driver InterfaceDriver Interface,傳輸驅(qū),傳輸驅(qū) 動程序接口)調(diào)用,然后使動程序接口)調(diào)用,然后使 用用TDITDI接口將它們轉(zhuǎn)發(fā)到傳接口將它們轉(zhuǎn)發(fā)到傳 輸驅(qū)動程序。輸驅(qū)動程序。 p 在在Windows 2003Windows 2003、Windows Windows XPXP、Windows 2000Windows 2000和和 Windows NTWindows NT操作系統(tǒng)中,操作系統(tǒng)中, NetBIOSNetBIOS操作的流程操作的流程如下:如下: 7.2.2 NCB結(jié)

16、構(gòu)體結(jié)構(gòu)體 typedef struct _NCB typedef struct _NCB UCHAR ncb_command; UCHAR ncb_command; UCHAR ncb_retcode; UCHAR ncb_retcode; UCHAR ncb_lsn; UCHAR ncb_lsn; UCHAR ncb_num; UCHAR ncb_num; PUCHAR ncb_buffer; PUCHAR ncb_buffer; WORD ncb_length; WORD ncb_length; UCHAR ncb_callnameNCBNAMSZ; UCHAR ncb_callname

17、NCBNAMSZ; UCHAR ncb_nameNCBNAMSZ; UCHAR ncb_nameNCBNAMSZ; UCHAR ncb_rto; UCHAR ncb_rto; UCHAR ncb_sto; UCHAR ncb_sto; void (CALLBACK void (CALLBACK * *ncb_post)(struct NCB);ncb_post)(struct NCB); UCHAR ncb_lana_num; UCHAR ncb_lana_num; UCHAR ncb_cmd_cplt; UCHAR ncb_cmd_cplt; UCHAR ncb_reserveX; UCHA

18、R ncb_reserveX; HANDLE ncb_event; HANDLE ncb_event; NCB, NCB, * *PNCB;PNCB; 1ncb_command 命令編碼可選值命令編碼可選值說說 明明 NCBACTION非標準NetBIOS 3.0命令 NCBADDGRNAME向本地名字表中添加一個組名,組名在網(wǎng)絡(luò)中必須是唯一的 NCBADDNAME向本地名字表中添加一個唯一的名字 NCBASTAT獲取本地或遠程網(wǎng)絡(luò)適配器的狀態(tài)。如果指定了此編碼,則成員變量_buffer指向填充了ADAPTER_STATUS結(jié) 構(gòu)體和NAME_BUFFER結(jié)構(gòu)體數(shù)組的緩沖區(qū) NCBCALL打開

19、與其他名字之間的會話 NCBCANCEL取消之前掛起的命令 NCBCHAINSEND向指定的會話伙伴發(fā)送兩個數(shù)據(jù)緩沖區(qū)的內(nèi)容 NCBCHAINSENDNA向指定的會話伙伴發(fā)送兩個數(shù)據(jù)緩沖區(qū)的內(nèi)容,并且不等待對方確認 NCBDELNAME從本地名字表中刪除一個名字 NCBDGRECV獲取來自任意名字的數(shù)據(jù)包 NCBDGRECVBC獲取來自任意名字的廣播數(shù)據(jù)包 NCBDGSEND向指定名字發(fā)送數(shù)據(jù)包 NCBDGSENDBC向局域網(wǎng)中的所有計算機發(fā)送廣播數(shù)據(jù)包 NCBENUM用于枚舉LANA編號。如果指定此編碼,則成員變量ncb_buffer指定填充了LANA_ENUM結(jié)構(gòu)體的緩沖區(qū)。 NCBENU

20、M不是標準的NetBIOS 3.0命令 NCBFINDNAME決定指定名字在網(wǎng)絡(luò)中的位置。如果指定此編碼,則成員變量_buffer指定填充了FIND_NAME_HEADER結(jié)構(gòu)體 和FIND_NAME_BUFFER結(jié)構(gòu)體的緩沖區(qū) NCBHANGUP關(guān)閉指定的會話 NCBLANSTALERT只對Windows Server 2003、Windows XP、Windows 2000和Windows NT等操作系統(tǒng)有效,提示用戶持續(xù)時間 在1分鐘以上的局域網(wǎng)故障 NCBLISTEN允許一個會話可以被其他名字打開 NCBRECV從指定的會話伙伴獲取數(shù)據(jù) NCBRECVANY從指定名字對應(yīng)的會話中獲取數(shù)

21、據(jù) NCBRESET復(fù)位局域網(wǎng)網(wǎng)絡(luò)適配器 NCBSEND向指定的會話伙伴發(fā)送數(shù)據(jù) NCBSENDNA向指定的會話伙伴發(fā)送數(shù)據(jù),并且不等待對方確認 NCBSSTAT獲取會話的狀態(tài)。如果指定了此參數(shù),則成員變量_buffer指向填充了SESSION_HEADER和SESSION_BUFFER結(jié) 構(gòu)體的緩沖區(qū) NCBTRACE激活或取消NCB跟蹤。此命令目前不被支持 NCBUNLINK斷開一個網(wǎng)絡(luò)適配器的連接。此命令只為與之前版本的NetBIOS兼容而提供,但在Windows中無效 2ncb_retcode 返回編碼可選值返回編碼可選值說說 明明 NRC_GOODRET操作成功 NRC_BUFLEN

22、提供了無效的緩沖區(qū)長度 NRC_ILLCMD提供了無效的命令 NRC_CMDTMO命令超時 NRC_INCOMP消息不完整,應(yīng)用程序正在執(zhí)行其他命令 NRC_BADDR緩沖區(qū)地址無效 NRC_SNUMOUT會話編號越界 NRC_NORES沒有有效的資源 NRC_SCLOSED會話已被關(guān)閉 NRC_CMDCAN命令被取消 NRC_DUPNAME在本地名字表中存在相同的名字 NRC_NAMTFUL名字表已滿 NRC_ACTSES命令已執(zhí)行完成,指定名字擁有活動的會話,并且不再注冊 NRC_LOCTFUL本地會話表已滿 NRC_REMTFUL遠端會話表已滿,打開會話的請求被拒絕 NRC_ILLNN指

23、定了無效的名稱編號 NRC_NOCALL系統(tǒng)沒有發(fā)現(xiàn)調(diào)用的名字 NRC_NOWILD成員變量ncb_name中不允許通配符 NRC_INUSE名字已經(jīng)在遠程適配器上使用 NRC_NAMERR名字已被刪除 NRC_SABORT會話非正常結(jié)束 NRC_NAMCONF檢測到名字沖突 NRC_IFBUSY接口忙 NRC_TOOMANY命令太多,應(yīng)用程序?qū)⒃谏院笾卦嚸?NRC_BRIDGE成員變量ncb_lana_num沒有指定有效的網(wǎng)絡(luò)編號 NRC_CANOCCR執(zhí)行取消操作后,命令已經(jīng)結(jié)束 NRC_CANCELNCBCANCEL命令無效,命令并未取消 NRC_DUPENV名字已經(jīng)被另一個本地進程占

24、用 NRC_ENVNOTDEF環(huán)境沒有被定義,因此必須執(zhí)行一個重置命令 NRC_OSRESNOTAV操作系統(tǒng)資源被耗光,該命令稍候會重試 NRC_MAXAPPS應(yīng)用程序數(shù)量超過規(guī)定的最大值 NRC_NOSAPS沒有對NetBIOS有效的服務(wù)訪問點(SAP,Service Acces Points) NRC_NORESOURCES請求的資源無效 NRC_INVADDRESSNCB地址無效 NRC_INVDDIDNCB DDID無效 NRC_LOCKFAIL嘗試鎖定用戶區(qū)域失敗 NRC_OPENERR當設(shè)備驅(qū)動器執(zhí)行打開操作時發(fā)生錯誤。錯誤編碼并不在NetBIOS 3.0中定義 NRC_SYSTE

25、M發(fā)生系統(tǒng)錯誤 NRC_PENDING異步操作并未結(jié)束 NCB結(jié)構(gòu)體其他成員變量結(jié)構(gòu)體其他成員變量 3 3ncb_lsnncb_lsn 表示本地會話編號。在指定環(huán)境中此編號唯一標識一個會話。調(diào)用表示本地會話編號。在指定環(huán)境中此編號唯一標識一個會話。調(diào)用Netbios()Netbios()函數(shù)成函數(shù)成 功執(zhí)行了功執(zhí)行了NCBCALLNCBCALL命令后返回此編號。命令后返回此編號。 4 4ncb_numncb_num 指定本地網(wǎng)絡(luò)名字編號。調(diào)用指定本地網(wǎng)絡(luò)名字編號。調(diào)用Netbios()Netbios()函數(shù)成功執(zhí)行了函數(shù)成功執(zhí)行了NCBADDNAMENCBADDNAME或者或者 NCBADDG

26、RNAMENCBADDGRNAME命令后返回此編號。此編號在所有數(shù)據(jù)包命令和命令后返回此編號。此編號在所有數(shù)據(jù)包命令和NCBRECVANYNCBRECVANY命令中使用命令中使用 。 5 5ncb_bufferncb_buffer 指向消息緩沖區(qū)??梢允褂帽碇赶蛳⒕彌_區(qū)??梢允褂帽?.47.4中的命令訪問消息緩沖區(qū)。中的命令訪問消息緩沖區(qū)。 命命 令令說說 明明 NCBSEND發(fā)送消息 NCBRECV接收消息 NCBSSTAT接收請求狀態(tài)信息 NCB結(jié)構(gòu)體其他成員變量結(jié)構(gòu)體其他成員變量 6 6ncb_lengthncb_length 指定消息緩沖區(qū)的大小,單位為字節(jié)。對于接收命令,此成員變量

27、由指定消息緩沖區(qū)的大小,單位為字節(jié)。對于接收命令,此成員變量由Netbios()Netbios()函數(shù)設(shè)置,表示接收到的字節(jié)數(shù)函數(shù)設(shè)置,表示接收到的字節(jié)數(shù) 。 如果緩沖區(qū)長度不正確,則如果緩沖區(qū)長度不正確,則Netbios()Netbios()函數(shù)返回函數(shù)返回NRC_BUFLENNRC_BUFLEN錯誤編碼。錯誤編碼。 7 7ncb_callnamencb_callname 指定遠端應(yīng)用程序的名字。指定遠端應(yīng)用程序的名字。 8 8ncb_namencb_name 指定應(yīng)用程序可以識別的名字。指定應(yīng)用程序可以識別的名字。 9 9ncb_rtoncb_rto 指定會話執(zhí)行接收操作的超時時間。將此成

28、員變量指定為指定會話執(zhí)行接收操作的超時時間。將此成員變量指定為0 0,表示在執(zhí)行,表示在執(zhí)行NCBCALLNCBCALL和和NCBLISTENNCBLISTEN命令時沒有超時。命令時沒有超時。 超時會影響隨后執(zhí)行的超時會影響隨后執(zhí)行的NCBRECVNCBRECV命令。命令。 1010ncb_stoncb_sto 指定會話執(zhí)行發(fā)送操作的超時時間。將此成員變量指定為指定會話執(zhí)行發(fā)送操作的超時時間。將此成員變量指定為0 0,表示在執(zhí)行,表示在執(zhí)行NCBCALLNCBCALL和和NCBLISTENNCBLISTEN命令時沒有超時。命令時沒有超時。 超時會影響隨后執(zhí)行的超時會影響隨后執(zhí)行的NCBSEND

29、NCBSEND和和NCBCHAINSENDNCBCHAINSEND命令。命令。 1111ncb_postncb_post 指定異步命令完成后需調(diào)用的例程地址。指定異步命令完成后需調(diào)用的例程地址。 1212ncb_lana_numncb_lana_num 指定指定LANALANA編號。編號。 1313ncb_cmd_cpltncb_cmd_cplt 指定命令完成標識。指定命令完成標識。 1414ncb_reservencb_reserve 保留字段,必須為保留字段,必須為0 0。 1515ncb_eventncb_event 指定事件對象的句柄。當執(zhí)行異步命令時,事件對象被設(shè)置為未受信狀態(tài);當異

30、步命令完成后,事件對象被設(shè)置指定事件對象的句柄。當執(zhí)行異步命令時,事件對象被設(shè)置為未受信狀態(tài);當異步命令完成后,事件對象被設(shè)置 為受信狀態(tài),這樣就可以執(zhí)行對應(yīng)的事件處理程序了。為受信狀態(tài),這樣就可以執(zhí)行對應(yīng)的事件處理程序了。 7.2.3 其他常用其他常用NetBIOS結(jié)構(gòu)體結(jié)構(gòu)體 1 1LANA_ENUMLANA_ENUM結(jié)構(gòu)體結(jié)構(gòu)體 2 2ADAPTER_STATUS結(jié)構(gòu)體結(jié)構(gòu)體 3 3NAME_BUFFERNAME_BUFFER結(jié)構(gòu)體結(jié)構(gòu)體 4 4ASTATASTAT結(jié)構(gòu)體結(jié)構(gòu)體 1LANA_ENUM結(jié)構(gòu)體結(jié)構(gòu)體 p LANA_ENUMLANA_ENUM結(jié)構(gòu)體中包含當前邏輯網(wǎng)絡(luò)適配器的數(shù)量

31、。當一個結(jié)構(gòu)體中包含當前邏輯網(wǎng)絡(luò)適配器的數(shù)量。當一個 物理網(wǎng)絡(luò)適配器綁定到一個網(wǎng)絡(luò)協(xié)議時,就對應(yīng)一個邏輯網(wǎng)物理網(wǎng)絡(luò)適配器綁定到一個網(wǎng)絡(luò)協(xié)議時,就對應(yīng)一個邏輯網(wǎng) 絡(luò)適配器。執(zhí)行絡(luò)適配器。執(zhí)行NCBNCB命令命令NCBENUMNCBENUM可以向可以向LANA_ENUMLANA_ENUM結(jié)構(gòu)體中填結(jié)構(gòu)體中填 充邏輯網(wǎng)絡(luò)適配器的個數(shù)和邏輯網(wǎng)絡(luò)適配器編號,此時充邏輯網(wǎng)絡(luò)適配器的個數(shù)和邏輯網(wǎng)絡(luò)適配器編號,此時NCBNCB結(jié)結(jié) 構(gòu)體中的構(gòu)體中的ncb_bufferncb_buffer成員變量指向成員變量指向LANA_ENUMLANA_ENUM結(jié)構(gòu)體。結(jié)構(gòu)體。 LANA_ENUMLANA_ENUM結(jié)構(gòu)體的定

32、義代碼如下:結(jié)構(gòu)體的定義代碼如下: typedef struct _LANA_ENUM typedef struct _LANA_ENUM UCHAR length; UCHAR length; UCHAR lanaMAX_LANA; UCHAR lanaMAX_LANA; LANA_ENUM, LANA_ENUM, * *PLANA_ENUM;PLANA_ENUM; 參數(shù)說明如下:參數(shù)說明如下: p lengthlength,系統(tǒng)中包含的邏輯網(wǎng)絡(luò)適配器數(shù)量。,系統(tǒng)中包含的邏輯網(wǎng)絡(luò)適配器數(shù)量。 p lanaMAX_LANAlanaMAX_LANA,系統(tǒng)中包含的邏輯網(wǎng)絡(luò)適配器編號數(shù)組。,系統(tǒng)中包

33、含的邏輯網(wǎng)絡(luò)適配器編號數(shù)組。 2ADAPTER_STATUS結(jié)構(gòu)體結(jié)構(gòu)體 pADAPTER_STATUSADAPTER_STATUS結(jié)構(gòu)體中包含網(wǎng)絡(luò)適配器的信結(jié)構(gòu)體中包含網(wǎng)絡(luò)適配器的信 息。息。NCBNCB結(jié)構(gòu)體的結(jié)構(gòu)體的ncb_bufferncb_buffer成員變量指定該成員變量指定該 結(jié)構(gòu)體。通常,結(jié)構(gòu)體。通常,ADAPTER_STATUSADAPTER_STATUS結(jié)構(gòu)體的后面結(jié)構(gòu)體的后面 跟著很多跟著很多NAME_BUFFERNAME_BUFFER結(jié)構(gòu)體。結(jié)構(gòu)體。 ADPATER_STATUS結(jié)構(gòu)體的定義代碼如下:結(jié)構(gòu)體的定義代碼如下: typedefstruct_ADAPTER_S

34、TATUS UCHARadapter_address6; UCHARrev_major; UCHARreserved0; UCHARadapter_type; UCHARrev_minor; WORDduration; WORDfrmr_recv; WORDfrmr_xmit; WORDiframe_recv_err; WORDxmit_aborts; DWORDxmit_success; DWORDrecv_success; WORD iframe_xmit_err; WORD recv_buff_unavail; WORD t1_timeouts; WORD ti_timeouts; DW

35、ORD reserved1; WORD free_ncbs; WORD max_cfg_ncbs; WORD max_ncbs; WORD xmit_buf_unavail; WORD max_dgram_size; WORD pending_sess; WORD max_cfg_sess; WORD max_sess; WORD max_sess_pkt_size; WORD name_count; ADAPTER_STATUS, *PADAPTER_STATUS; ADAPTER_STATUS結(jié)構(gòu)體結(jié)構(gòu)體參數(shù)說明參數(shù)說明 padapter_addressadapter_address,指定

36、網(wǎng)絡(luò)適配器的地址。,指定網(wǎng)絡(luò)適配器的地址。 prev_majorrev_major,指定發(fā)布軟件的主版本號。例如,如果發(fā)布版本號為,指定發(fā)布軟件的主版本號。例如,如果發(fā)布版本號為IBM NetBIOS 3.xIBM NetBIOS 3.x,則,則rev_majorrev_major的值為的值為3 3 。 preserved0reserved0,保留字段,始終為,保留字段,始終為0 0。 padapter_typeadapter_type,指定網(wǎng)絡(luò)適配器的類型。如果是令牌環(huán)適配器,則該值為,指定網(wǎng)絡(luò)適配器的類型。如果是令牌環(huán)適配器,則該值為0 xFF0 xFF;如果是以太網(wǎng)適配器,則;如果是以太

37、網(wǎng)適配器,則 該值為該值為0 xFE0 xFE。 prev_minorrev_minor,指定發(fā)布軟件的副版本號。例如,如果發(fā)布版本號為,指定發(fā)布軟件的副版本號。例如,如果發(fā)布版本號為IBM NetBIOS 3.0IBM NetBIOS 3.0,則,則rev_minorrev_minor的值為的值為0 0 。 pdurationduration,指定報告的時間周期,單位為分鐘。,指定報告的時間周期,單位為分鐘。 pfrmr_recvfrmr_recv,指定接收到的,指定接收到的FRMRFRMR(幀拒絕)幀數(shù)量。(幀拒絕)幀數(shù)量。 pfrmr_xmitfrmr_xmit,指定傳送的,指定傳送的F

38、RMRFRMR幀數(shù)量。幀數(shù)量。 piframe_recv_erriframe_recv_err,指定接收到的錯誤幀數(shù)量。,指定接收到的錯誤幀數(shù)量。 pxmit_abortsxmit_aborts,指定終止傳輸?shù)陌鼣?shù)量。,指定終止傳輸?shù)陌鼣?shù)量。 pxmit_successxmit_success,指定成功傳輸?shù)陌鼣?shù)量。,指定成功傳輸?shù)陌鼣?shù)量。 precv_successrecv_success,指定成功接收的包數(shù)量。,指定成功接收的包數(shù)量。 piframe_xmit_erriframe_xmit_err,指定傳輸?shù)腻e誤幀數(shù)量。,指定傳輸?shù)腻e誤幀數(shù)量。 precv_buff_unavailrecv

39、_buff_unavail,指定緩沖區(qū)無法為遠程計算機提供服務(wù)的次數(shù)。,指定緩沖區(qū)無法為遠程計算機提供服務(wù)的次數(shù)。 pt1_timeoutst1_timeouts,指定,指定DLCDLC(Data Link ControlData Link Control,數(shù)據(jù)鏈路控制),數(shù)據(jù)鏈路控制) T1 T1計時器超時的次數(shù)。計時器超時的次數(shù)。 pti_timeoutsti_timeouts,指定,指定titi非活動計時器超時的次數(shù)。非活動計時器超時的次數(shù)。t1t1計時器用于檢測斷開的連接。計時器用于檢測斷開的連接。 preserved1reserved1,保留字段,始終為,保留字段,始終為0 0。 p

40、free_ncbsfree_ncbs,指定當前空閑的網(wǎng)絡(luò)控制塊的數(shù)量。,指定當前空閑的網(wǎng)絡(luò)控制塊的數(shù)量。 pmax_dgram_sizemax_dgram_size,指定數(shù)據(jù)包的最大大小,該值至少為,指定數(shù)據(jù)包的最大大小,該值至少為512512字節(jié)。字節(jié)。 ppending sesspending sess,指定掛起會話的數(shù)量。,指定掛起會話的數(shù)量。 pmax_cfg_sessmax_cfg_sess,指定配置的最大掛起會話數(shù)量。,指定配置的最大掛起會話數(shù)量。 pmax_sess_pkt_sizemax_sess_pkt_size,指定會話數(shù)據(jù)包的最大大小。,指定會話數(shù)據(jù)包的最大大小。 pna

41、me_countname_count,指定本地名字表中名字的數(shù)量。,指定本地名字表中名字的數(shù)量。 3NAME_BUFFER結(jié)構(gòu)體結(jié)構(gòu)體 p 結(jié)構(gòu)體結(jié)構(gòu)體NAME_BUFFERNAME_BUFFER中包含本地網(wǎng)絡(luò)名字信息。當應(yīng)用程序執(zhí)行中包含本地網(wǎng)絡(luò)名字信息。當應(yīng)用程序執(zhí)行 NCBASTATNCBASTAT命令時,可以獲取命令時,可以獲取ADAPTER_STATUSADAPTER_STATUS結(jié)構(gòu)體及其后面的結(jié)構(gòu)體及其后面的 NAME_BUFFERNAME_BUFFER結(jié)構(gòu)體。結(jié)構(gòu)體。 NAME_BUFFERNAME_BUFFER結(jié)構(gòu)體。結(jié)構(gòu)體。 typedef struct _NAME_BUF

42、FER typedef struct _NAME_BUFFER UCHAR nameNCBNAMSZ; UCHAR nameNCBNAMSZ; UCHAR name_num; UCHAR name_num; UCHAR name_flags; UCHAR name_flags; NAME_BUFFER, NAME_BUFFER, * *PNAME_BUFFER;PNAME_BUFFER; 參數(shù)說明如下:參數(shù)說明如下: p namename,指定本地網(wǎng)絡(luò)名字,該值對應(yīng),指定本地網(wǎng)絡(luò)名字,該值對應(yīng)NCBNCB結(jié)構(gòu)體的結(jié)構(gòu)體的ncb_namencb_name字段。字段。 p name_numname

43、_num,指定本地網(wǎng)絡(luò)名字的數(shù)量,該值對應(yīng),指定本地網(wǎng)絡(luò)名字的數(shù)量,該值對應(yīng)NCBNCB結(jié)構(gòu)體的結(jié)構(gòu)體的ncb_numncb_num 字段。字段。 p name_flagsname_flags,指定名字表條目的當前狀態(tài)。,指定名字表條目的當前狀態(tài)。 4ASTAT結(jié)構(gòu)體結(jié)構(gòu)體 p ASTATASTAT結(jié)構(gòu)體用于描述網(wǎng)絡(luò)適配器的狀態(tài)和名字信息,定義代結(jié)構(gòu)體用于描述網(wǎng)絡(luò)適配器的狀態(tài)和名字信息,定義代 碼如下:碼如下: typedef structtypedef struct ADAPTER_STATUS adapt; ADAPTER_STATUS adapt; NAME_BUFFER NameBuf

44、f30; NAME_BUFFER NameBuff30; ASTAT; ASTAT; p 參數(shù)參數(shù)adaptadapt表示網(wǎng)絡(luò)適配器的狀態(tài)信息,參數(shù)表示網(wǎng)絡(luò)適配器的狀態(tài)信息,參數(shù)NameBuffNameBuff表示網(wǎng)表示網(wǎng) 絡(luò)適配器中保存的本地網(wǎng)絡(luò)名字信息。絡(luò)適配器中保存的本地網(wǎng)絡(luò)名字信息。 7.2.4 Netbios()函數(shù)函數(shù) p Netbios()Netbios()函數(shù)用于解釋和執(zhí)行指定的網(wǎng)絡(luò)控制塊(函數(shù)用于解釋和執(zhí)行指定的網(wǎng)絡(luò)控制塊(NCBNCB ),語法如下:),語法如下: UCHAR Netbios(UCHAR Netbios( _in PCNB _in PCNB pcnbpcnb

45、 );); p 參數(shù)參數(shù)pcnbpcnb是指定是指定NCBNCB結(jié)構(gòu)體的指針,用于描述網(wǎng)絡(luò)控制結(jié)構(gòu)體的指針,用于描述網(wǎng)絡(luò)控制 塊。塊。 p 如果執(zhí)行同步請求命令,則函數(shù)的返回值為如果執(zhí)行同步請求命令,則函數(shù)的返回值為NCBNCB結(jié)構(gòu)體結(jié)構(gòu)體 的編碼。該值也保存在的編碼。該值也保存在NCBNCB結(jié)構(gòu)體的結(jié)構(gòu)體的ncb_retcodencb_retcode字段中字段中 。 異步請求的返回值有以下兩種情況:異步請求的返回值有以下兩種情況: (1 1)如果)如果Netbios()Netbios()返回時異步命令已經(jīng)完成返回時異步命令已經(jīng)完成 ,則返回值為,則返回值為NCBNCB結(jié)構(gòu)體的編碼,這與同步請

46、結(jié)構(gòu)體的編碼,這與同步請 求的返回值相同。求的返回值相同。 (2 2)如果)如果Netbios()Netbios()返回時異步命令尚未完成返回時異步命令尚未完成 ,則返回值為,則返回值為0 0。 p如果如果pncbpncb參數(shù)中指定的地址無效,則返回參數(shù)中指定的地址無效,則返回 NRC_BADNCBNRC_BADNCB。 p如果如果NCBNCB結(jié)構(gòu)體中結(jié)構(gòu)體中ncb_lengthncb_length字段指定的緩沖字段指定的緩沖 區(qū)長度不正確,或者緩沖區(qū)不允許執(zhí)行寫操區(qū)長度不正確,或者緩沖區(qū)不允許執(zhí)行寫操 作,則返回作,則返回NRC_BUFLENNRC_BUFLEN。 7.2.5 獲取獲取LAN

47、A上的所有上的所有NetBIOS名名 字字 【例【例7.17.1】編寫程序,向本地名字表中添加一個名字】編寫程序,向本地名字表中添加一個名字UNIQUENAMEUNIQUENAME,然后列,然后列 出指定出指定LANA0LANA0中定義的所有中定義的所有NetBIOSNetBIOS名字。名字。 第第1 1個名字是本地計算機名,第個名字是本地計算機名,第2 2個名字是本地計算機所屬的工作組名,個名字是本地計算機所屬的工作組名, 最后一個名字是新添加的最后一個名字是新添加的NetBIOSNetBIOS名字。下面對本實例中的代碼進行介紹名字。下面對本實例中的代碼進行介紹 。 1引用的頭文件和庫文件引

48、用的頭文件和庫文件 #include stdafx.h#include stdafx.h #include #include #include #include #include #include #include #include #pragma comment(lib, netapi32.lib)#pragma comment(lib, netapi32.lib) 其中其中Nb30.hNb30.h是定義是定義NetBIOSNetBIOS結(jié)構(gòu)體和函數(shù)的頭文件,而結(jié)構(gòu)體和函數(shù)的頭文件,而netapi32.libnetapi32.lib 則是則是NetBIOSNetBIOS編程所需要的靜態(tài)庫文件

49、。編程所需要的靜態(tài)庫文件。 2常量和宏定義常量和宏定義 #define LANANUM 0#define LANANUM 0/ / 本實例中操作的本實例中操作的LANALANA編號編號 / / 本實例中添加的名字,注意不能與本地計算機重名本實例中添加的名字,注意不能與本地計算機重名 #define LOCALNAME UNIQUENAME“#define LOCALNAME UNIQUENAME“ #define NBCheck(x) if (NRC_GOODRET != x.ncb_retcode) #define NBCheck(x) if (NRC_GOODRET != x.ncb_re

50、tcode) printf(Line %d: Got 0 x%x from NetBios()n, printf(Line %d: Got 0 x%x from NetBios()n, _LINE_, x.ncb_retcode); _LINE_, x.ncb_retcode); 在使用宏在使用宏NBCheckNBCheck時,使用時,使用ncbncb結(jié)構(gòu)體為參數(shù)。結(jié)構(gòu)體為參數(shù)。ncbncb結(jié)構(gòu)體的結(jié)構(gòu)體的ncb_retcodencb_retcode參數(shù)表示調(diào)參數(shù)表示調(diào) 用用Netbios()Netbios()函數(shù)的返回值。如果返回值不等于函數(shù)的返回值。如果返回值不等于NRC_GOODRETN

51、RC_GOODRET,則表示函數(shù)調(diào)用失敗,則表示函數(shù)調(diào)用失敗 ,需要輸出發(fā)生錯誤的行號和函數(shù)返回值,以便用戶定位問題。,需要輸出發(fā)生錯誤的行號和函數(shù)返回值,以便用戶定位問題。 3NBReset()函數(shù)函數(shù) BOOL NBReset (int nLana, int nSessions, int nNames)BOOL NBReset (int nLana, int nSessions, int nNames) NCB ncb; NCB ncb; / / 初始化初始化ncbncb結(jié)構(gòu)體結(jié)構(gòu)體 memset ( memset ( / / 清空清空ncbncb結(jié)構(gòu)體結(jié)構(gòu)體 ncb.ncb_comman

52、d = NCBRESET; ncb.ncb_command = NCBRESET;/ / 執(zhí)行執(zhí)行NCBRESETNCBRESET命令命令 ncb.ncb_lsn = 0; ncb.ncb_lsn = 0;/ / 分配新的分配新的lana_numlana_num資源資源 ncb.ncb_lana_num = nLana; ncb.ncb_lana_num = nLana;/ / 設(shè)置設(shè)置lana_numlana_num資源資源 ncb.ncb_callname0 = nSessions;/ ncb.ncb_callname0 = nSessions;/ 設(shè)置最大會話數(shù)設(shè)置最大會話數(shù) ncb.n

53、cb_callname2 = nNames; ncb.ncb_callname2 = nNames;/ / 設(shè)置最大名字數(shù)設(shè)置最大名字數(shù) Netbios ( Netbios (/ / 執(zhí)行執(zhí)行NCBRESETNCBRESET命令命令 NBCheck (ncb); NBCheck (ncb);/ / 如果執(zhí)行結(jié)果不正確,則輸出如果執(zhí)行結(jié)果不正確,則輸出ncb.ncb_retcodencb.ncb_retcode / / 如果成功返回如果成功返回TRUETRUE,否則返回,否則返回FALSEFALSE return (NRC_GOODRET = ncb.ncb_retcode); return (

54、NRC_GOODRET = ncb.ncb_retcode); 4NBAddName()函數(shù)函數(shù) BOOL NBAddName (int nLana, LPCSTR szName)BOOL NBAddName (int nLana, LPCSTR szName) NCB ncb; NCB ncb; memset ( memset ( / / 清空清空ncbncb結(jié)構(gòu)體結(jié)構(gòu)體 ncb.ncb_command = NCBADDNAME; ncb.ncb_command = NCBADDNAME;/ / 執(zhí)行執(zhí)行NCBDDNAMENCBDDNAME命令命令 ncb.ncb_lana_num = nL

55、ana; ncb.ncb_lana_num = nLana;/ / 設(shè)置設(shè)置lana_numlana_num / / 將將szNameszName賦值到賦值到ncb.ncb_namencb.ncb_name中中 MakeNetbiosName (char MakeNetbiosName (char* *) ncb.ncb_name, szName);) ncb.ncb_name, szName); Netbios ( Netbios (/ / 執(zhí)行執(zhí)行NCBRESETNCBRESET命令命令 NBCheck (ncb); / NBCheck (ncb); / 如果執(zhí)行結(jié)果不正確,則輸出如果執(zhí)行

56、結(jié)果不正確,則輸出 ncb.ncb_retcodencb.ncb_retcode / / 如果成功返回如果成功返回TRUETRUE,否則返回,否則返回FALSEFALSE return (NRC_GOODRET = ncb.ncb_retcode); return (NRC_GOODRET = ncb.ncb_retcode); MakenetbiosName()函數(shù)函數(shù) / 將將szSrc中的名字賦值到中的名字賦值到achDest中,名字的長度為中,名字的長度為 NCBNAMESZ / 如果不足,則使用空格補齊如果不足,則使用空格補齊 void MakeNetbiosName (char *

57、achDest, LPCSTR szSrc) int cchSrc; cchSrc = lstrlen (szSrc); if (cchSrc NCBNAMSZ) cchSrc = NCBNAMSZ; memset (achDest, , NCBNAMSZ); memcpy (achDest, szSrc, cchSrc); 5NBAdapterStatus()函數(shù)函數(shù) / / 獲取指定獲取指定LANALANA的網(wǎng)絡(luò)適配器信息的網(wǎng)絡(luò)適配器信息 / nLana, LANA/ nLana, LANA編號編號 / pBuffer, / pBuffer, 獲取到的網(wǎng)絡(luò)適配器緩沖區(qū)獲取到的網(wǎng)絡(luò)適配器緩沖

58、區(qū) / cbBuffer, / cbBuffer, 緩沖區(qū)長度緩沖區(qū)長度 / szName, / szName, 主機名字主機名字 BOOL NBAdapterStatus (int nLana, PVOID pBuffer, int cbBuffer, LPCSTR szName)BOOL NBAdapterStatus (int nLana, PVOID pBuffer, int cbBuffer, LPCSTR szName) NCB ncb; NCB ncb; memset ( memset (/ / 清空清空ncbncb結(jié)構(gòu)體結(jié)構(gòu)體 ncb.ncb_command = NCBASTA

59、T;/ ncb.ncb_command = NCBASTAT;/ 設(shè)置執(zhí)行設(shè)置執(zhí)行NCBASTATNCBASTAT命令命令 ncb.ncb_lana_num = nLana;/ ncb.ncb_lana_num = nLana;/ 設(shè)置設(shè)置LANALANA編號編號 / / 將獲取到的數(shù)據(jù)保存到參數(shù)將獲取到的數(shù)據(jù)保存到參數(shù)pBufferpBuffer中中 ncb.ncb_buffer = (PUCHAR) pBuffer; ncb.ncb_buffer = (PUCHAR) pBuffer; ncb.ncb_length = cbBuffer;/ ncb.ncb_length = cbBuffe

60、r;/ 設(shè)置緩沖區(qū)長度設(shè)置緩沖區(qū)長度 / / 設(shè)置參數(shù)設(shè)置參數(shù)ncb.ncb_callnamencb.ncb_callname MakeNetbiosName (char MakeNetbiosName (char* *) ncb.ncb_callname, szName);) ncb.ncb_callname, szName); Netbios ( Netbios (/ / 執(zhí)行執(zhí)行NetBIOSNetBIOS命令命令 NBCheck (ncb); NBCheck (ncb);/ / 如果執(zhí)行不成功,則輸出返回值如果執(zhí)行不成功,則輸出返回值 / / 如果成功返回如果成功返回TRUETRUE,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論