• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 60  文章 - 5  trackbacks - 0
            <2011年4月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            常用鏈接

            留言簿(2)

            隨筆分類(lèi)(42)

            隨筆檔案(60)

            文章檔案(2)

            我收藏的博客

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            在WindowsXP sp2以后,鑒于安全方面的考慮,XP的網(wǎng)絡(luò)共享僅啟用了簡(jiǎn)單的共享模式;用戶(hù)若要自義共享則會(huì)遇到這樣或那樣的問(wèn)題,不是找不到網(wǎng)絡(luò)名就是權(quán)限不夠。
                對(duì)于網(wǎng)絡(luò)共享,XP提供了兩種模式:一種是簡(jiǎn)單的共享模式,一種是高級(jí)的共享模式(即經(jīng)典模式),第一種模式的共享默認(rèn)只能使用來(lái)賓帳戶(hù)身份來(lái)訪問(wèn),而 XP的來(lái)賓帳戶(hù)恰好是禁用的,所以在這種模式下的共享肯定是不成功的;那么經(jīng)典共享模式則允許高級(jí)用戶(hù)以自己的身份去訪問(wèn)網(wǎng)絡(luò),用戶(hù)權(quán)限足夠的話也可以對(duì)網(wǎng)絡(luò)上的文件進(jìn)行改寫(xiě)等操作。

            下面就如何開(kāi)啟XP的經(jīng)典共享模式作一下簡(jiǎn)單的介紹,共享筆者的經(jīng)驗(yàn),以減少大家不必要的麻煩。

            1.首先打開(kāi)運(yùn)行對(duì)話框,鍵入:gpedit.msc ,進(jìn)入組策略編輯器,
            2.依次展開(kāi) 計(jì)算機(jī)配置 —〉Windows設(shè)置—〉安全設(shè)置—〉本地策略—〉安全選項(xiàng),
            3.在策略列表中找到 “網(wǎng)絡(luò)訪問(wèn):本地帳戶(hù)的共享和安全模式”,
            4.雙擊打開(kāi)該條策略的屬性對(duì)話框,選擇“經(jīng)典—本地用戶(hù)以自己的身份驗(yàn)證”。

            至此,我們已成功開(kāi)啟XP的經(jīng)典共享模式。
            posted @ 2009-05-31 16:49 黃劍父 閱讀(230) | 評(píng)論 (0)編輯 收藏
            GlobalAlloc是標(biāo)準(zhǔn)內(nèi)存管理函數(shù),標(biāo)準(zhǔn)內(nèi)存管理函數(shù)都是操作進(jìn)程的默認(rèn)堆,所以這個(gè)函數(shù)是從進(jìn)程的從進(jìn)程的默認(rèn)堆中分配內(nèi)存空間,分配的空間可以是可移動(dòng)的也可以是不可以移動(dòng)的。可移動(dòng)的內(nèi)存是指windows在需要的時(shí)候可以將這個(gè)內(nèi)存移動(dòng)到另外一個(gè)地址  
               
              HeapAllock是堆管理函數(shù),堆管理函數(shù)可以操作非默認(rèn)堆(當(dāng)然也可以操作默認(rèn)堆),創(chuàng)建一個(gè)堆是用HeapCreate,這個(gè)函數(shù)返回一個(gè)堆句柄,然后可以用在HeapAllock函數(shù)中,即從返回的這個(gè)堆中申請(qǐng)內(nèi)存空間,HeapAllock申請(qǐng)的內(nèi)存只能是不可以移動(dòng)的  
               
              而new則是c++的標(biāo)準(zhǔn)函數(shù),在windows的vc++編譯器中,new在申請(qǐng)內(nèi)存最終調(diào)用的是GlabalAllock,不過(guò)new還會(huì)調(diào)用類(lèi)的構(gòu)造函數(shù)。  
               
              windows的內(nèi)存管理除了標(biāo)準(zhǔn)內(nèi)存管理函數(shù)和堆管理函數(shù)之外,還有更加底層的虛擬內(nèi)存管理函數(shù),VirtualAllock就是一個(gè)虛擬內(nèi)存管理函數(shù)。
            posted @ 2009-05-31 16:46 黃劍父 閱讀(158) | 評(píng)論 (0)編輯 收藏

            物理地址是外部連接使用的、唯一的,它是“與地址總線相對(duì)應(yīng)”;而邏輯地址是內(nèi)部和編程使用的、并不唯一。 在內(nèi)存中的實(shí)際地址就是所謂的“物理地址”,而邏輯地址就是邏輯段管理內(nèi)存而形成的。 例如,你在進(jìn)行C語(yǔ)言指針編程中,可以讀取指針變量本身值(&操作),實(shí)際上這個(gè)值就是邏輯地址,它是相對(duì)于你當(dāng)前進(jìn)程數(shù)據(jù)段的地址(偏移地址),不和絕對(duì)物理地址相干。只有在Intel實(shí)模式下,邏輯地址才和物理地址相等(因?yàn)閷?shí)模式?jīng)]有分段或分頁(yè)機(jī)制,Cpu不進(jìn)行自動(dòng)地址轉(zhuǎn)換),邏輯地址也就是Intel 保護(hù)模式下程序執(zhí)行代碼段限長(zhǎng)內(nèi)的偏移地址(假定代碼段、數(shù)據(jù)段如果完全一樣)。8086體系的CPU一開(kāi)始是20根地址線, 尋址寄存器是16位, 16位的寄存器可以訪問(wèn)64K的地址空間, 如果程序要想訪問(wèn)大于64K的內(nèi)存, 就要把內(nèi)存分段, 每段64K, 用段地址+偏移量的方法來(lái)訪問(wèn) 。386CPU出來(lái)之后, 采用了32條地址線, 地址寄存器也擴(kuò)為32位, 這樣就可以不用分段了, 直接用一個(gè)地址寄存器來(lái)線性訪問(wèn)4G的內(nèi)存了. 這就叫平面模式.

            邏輯地址中的段地址左移4位,加上偏移地址就得到20位物理地址這里左移的4位是二進(jìn)制位如果用十六進(jìn)制表達(dá)地址就是左移一位。左移4位還可以表達(dá)為乘以16,即:段地址×16+偏移地址。
            同一個(gè)物理地址可以對(duì)應(yīng)多個(gè)邏輯地址形式。所以物理地址轉(zhuǎn)換為邏輯地址,需要明確段基地址或偏移地址,然后同上原則確定另一個(gè)地址。
            邏輯地址 1460H : 0100H 或1380H : 0900H
            物理地址 14700H
            于是,對(duì)于主存14700H單元,我們可以描述為在1460H(或1380H)段的0100H(或0900H)單元,或者說(shuō)主存1460H : 0100H(或1380H : 0900H)單元。

            存儲(chǔ)單元的地址可以用段基值和段內(nèi)偏移量來(lái)表示,段基值確定它所在的段居于整個(gè)存儲(chǔ)空間的位置,偏移量確定它在段內(nèi)的位置,這種地址表示方式稱(chēng)為邏輯地址

            8086對(duì)外連接使用一個(gè)20位的線性地址唯一確定一個(gè)存儲(chǔ)單元,也就是說(shuō):對(duì)于每個(gè)存儲(chǔ)器單元都有的一個(gè)唯一的20位地址,我們稱(chēng)為該單元的物理地址絕對(duì)地址

            8086在內(nèi)部結(jié)構(gòu)中和程序設(shè)計(jì)時(shí)采用邏輯段管理內(nèi)存,就形成了邏輯地址。它的表達(dá)形式為“段基地址 : 偏移地址”。

            posted @ 2009-05-31 16:05 黃劍父 閱讀(580) | 評(píng)論 (0)編輯 收藏
            【DriverEntry】
            Each driver must have a [DriverEntry] routine,which initializes driver-wide data structures and resources.The I/O manager calls the DriverEntry routine when it loads the driver.
            DriverEntry is the first routine called after a driver loaded,and is responsible for initializing the driver.
            DriverEntry routine are called in the context of a system thread at IRQL=PASSIVE_LEVEL.


            posted @ 2009-05-31 14:25 黃劍父 閱讀(149) | 評(píng)論 (0)編輯 收藏
            __try Begins a guarded body of code. Used with the __except keyword to construct an exception handler, or with the __finally keyword to construct a termination handler.
            __except Begins a block of code that is executed only when an exception occurs within its associated __try block.
            __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.
            posted @ 2009-05-31 14:24 黃劍父 閱讀(1776) | 評(píng)論 (0)編輯 收藏
            近四百年來(lái),西方文化成為引領(lǐng)世界的主流。我們一直在說(shuō)民族復(fù)興,在想我們古代的四大發(fā)明,特別是說(shuō)到火藥,西方人利用火藥,打開(kāi)了我們的國(guó)門(mén),掠奪了中華民族的物質(zhì)財(cái)富。我們自己卻在用火藥放鞭炮,煙花。到現(xiàn)在我們至今仍然落后于西方國(guó)家。如今冷靜下來(lái),稍微算一算賬,發(fā)現(xiàn)西方主導(dǎo)的結(jié)果,竟然是浪費(fèi)地球能源、破壞自然生態(tài)、漠視社會(huì)主義、欺壓弱勢(shì)族群。這才猛然覺(jué)醒,我們現(xiàn)在所談的民族復(fù)興的目標(biāo)是什么。因?yàn)橹两駷橹梗^民族復(fù)興的目的、意義,我還不清楚。想想我們的先人創(chuàng)造的古文明,能夠經(jīng)歷這么久遠(yuǎn),有一些古代的思想,《易經(jīng)》、道家、儒家等等思想,還有人舍不得丟棄,是不是有另一番道理?我們?cè)趯W(xué)習(xí)西方文化的同時(shí),是不是也要好好拿起自家的東西,好好學(xué)習(xí),好好研究。
            特別是近代,我們?cè)趯W(xué)習(xí)西方的時(shí)候,付出了什么樣的代價(jià),帶給了我們什么樣的利益,為我們的民族復(fù)興做出了什么樣的貢獻(xiàn),我想大家都應(yīng)該好好的好好的想想。

            posted @ 2009-05-20 22:24 黃劍父 閱讀(1132) | 評(píng)論 (0)編輯 收藏
            ACE的構(gòu)建(VC++6.0環(huán)境)
            Windows下ACE的構(gòu)建
            1. 將ACE-5.5.zip解壓到所需的安裝目錄,此處以E:\為例,解壓后形成ACE_wrappers文件夾,因此ACE將會(huì)存在于ACE_wrappers\ace目錄中。ACE_ROOT=E:\ACE_wrappers。
            2. 在系統(tǒng)中新建ACE_ROOT環(huán)境變量,值設(shè)為 E:\ACE_wrappers。具體設(shè)置為:我的電腦->屬性->高級(jí)->環(huán)境變量->新建
            3. 在E:\ACE_wrappers\ace目錄中創(chuàng)建一個(gè)頭文件,命名為config.h,其內(nèi)容為:
            #include "ace/config-win32.h"(必選項(xiàng))
            #define ACE_HAS_STANDARD_CPP_LIBRARY 1 (MSVC自帶的標(biāo)準(zhǔn)C++頭文件)
            #define ACE_HAS_MFC 1(與MFC一起使用)
            #define ACE_NO_INLINE(取消函數(shù)內(nèi)聯(lián)從而減小靜態(tài)庫(kù)和運(yùn)行碼的大小)
            #define ACE_AS_STATIC_LIBS(構(gòu)建ACE的靜態(tài)版本)
            #define ACE_HAS_WINNT4 0(在Windows 9x/me上構(gòu)建所需,在ACE中移掉一些WinNT/Win2K中特有的代碼)
            以上只需要添加前兩項(xiàng)就可以了。
            4. 在VC++中加載ACE的工程文件(ACE_ROOT \ace\ace.dsw),在release和debug兩種編譯方式下進(jìn)行編譯,得到相應(yīng)的庫(kù)文件(ACE.dll、ACE.lib 和 ACEd.dll、ACEd.lib),其中ACE.dll 、ACE.lib是由release版生成的,ACEd.dll、ACEd.lib是由debug版生成的。具體操作方法:運(yùn)行VC++,選擇Build ->Batch Build…,將ACE-Win32 Debug和ACE-Win32 Release全部選中,Rebuild All即可。如下圖所示:

            按照上面的方法可能只編譯出ACE.dll 、ACE.lib庫(kù)文件,具體原因還不詳。按照下面的操作方法進(jìn)行編譯可以成功生成全部庫(kù)文件。具體操作方法:Build->Set Active Configuration…分別選中ACE-Win32 Release進(jìn)行編譯即可。如下圖所示

            同樣打開(kāi)ace_static.dsw編譯生成ACEs.lib、 ACEsd.lib、ACE_RMCasts.lib、ACE_RMCastsd.lib、TMCasts.lib、TMCastsd.lib

            5. 配置ACE環(huán)境。 打開(kāi)VC++6.0,選擇Tools->Options->Directories 加入以下內(nèi)容:
            1) Executable File:E:\ACE_wrappers\bin
            2) Include File:E:\ACE_wrappers
            3) Library Files:E:\ACE_wrappers\lib
            4) Source Files:E:\ACE_wrappers
            在編寫(xiě)程序時(shí)要在Project->Settings菜單中進(jìn)行如下設(shè)置:
            C/C++選項(xiàng)卡:
            Code Generation:選擇多線程版運(yùn)行時(shí)庫(kù)(Multithreaded DLL)。
            Preprocessor:在“Additional include directories”域中加入$ACE_ROOT。  
            Link選項(xiàng)卡:
            Input:在“Object/library modules”域中包含適當(dāng)?shù)腁CE庫(kù)文件,在“Additional library
            path”域中包含ACE庫(kù)鏈接文件的路徑。這通常是ACE_ROOT/ace。
            其中 DLL debug對(duì)應(yīng)ACEd.lib
                DLL release對(duì)應(yīng)ACE.lib
                Static library debug對(duì)應(yīng)ACEsd.lib
                Static library release對(duì)應(yīng)ACEs.lib
                MFC DLL debug對(duì)應(yīng)ACEmfcd.lib
                MFC DLL release對(duì)應(yīng)ACEmfc.lib
               主要用到以上兩個(gè)庫(kù)。

            6. 在系統(tǒng)環(huán)境的變量 path中加入E:\ACE_wrappers\bin,否則在運(yùn)行程序的時(shí)候碰到尋找ace.dll或者aced.dll的問(wèn)題。
            7. 在MFC程序中使用時(shí),應(yīng)該在InitInstance()中添加:
            WSDATA wsData;
            WORD VerRequested = MAKEWORD (2, 2);
            WSAStarup (VerRequested, &wsData)
            注:可以在頭文件中加入如下代碼就不用再手動(dòng)填加lib庫(kù)文件
            #ifdef _DEBUG
            #pragma comment (lib,"aced.lib")
            #else
            #pragma comment (lib,"ace.lib")
            #endif
            8. 在windows下release時(shí)有可能報(bào)錯(cuò),錯(cuò)誤如下:
            error C2039: 'TryEnterCriticalSection' : is not a member of '`global
            error C2065: 'TryEnterCriticalSection' : undeclared identifier
            解決辦法:
            工程 Project-->setting-->C/C++   寫(xiě)入:_WIN32_WINNT=0x0500
            Linux 下ACE的構(gòu)建
            1. 設(shè)置環(huán)境變量ACE_ROOT,命令如下:
            “vi /etc/profile” ,在“export PATH USER….”后加入4行
            ? ACE_ROOT=/opt/ACE
            ? export ACE_ROOT
            ? LD_LIBRARY_PATH=$ACE_ROOT/aceLD_LIBRARY_PATH
            ? export LD_LIBRARY_PATH
            完 成后將/etc/profile執(zhí)行一次,命令:“chmod 555 /etc/profile”,“/etc/profile”。這樣我們的ACE_ROOT就設(shè)置好了,可以用如下命令查看ACE_ROOT是否設(shè)置好了: “echo $ACE_ROOT” ,這個(gè)時(shí)候最好reboot啟動(dòng)一次linux。
            2. 解壓ACE.tar.gz包:
            不 要自己手工將ACE.tar.gz包完全解開(kāi),特別強(qiáng)調(diào)不要完全解開(kāi),后面可以看到安裝腳本會(huì)給我們解開(kāi)它的;如果你手工解開(kāi)全部,安裝腳本將會(huì)將你的解 壓縮目錄刪除的!我們要做的事就只是將ACE.tar.gz包中的ACE-install.sh安裝腳本單獨(dú)解出來(lái),并對(duì)其修改。我們只要這一個(gè)文件就可 以。用mkdir建目錄,如/home/my/ACE,然后將你的ACE.tar.gz放在此目錄下(用cp命令拷貝或mv命令移動(dòng)到此目錄)。注意這個(gè) 目錄將是你的一個(gè)存放ACE.tar.gz的目錄,安裝腳本會(huì)來(lái)這個(gè)目錄找這個(gè)文件的,這個(gè)目錄和ACE_ROOT是不一樣的,且ACE- install.sh也提示不要將這兩個(gè)目錄設(shè)置成同一個(gè)目錄。ACE_ROOT將是我們的安裝目標(biāo)目錄。
            3. 從ACE.tar.gz解壓出單個(gè)文件ACE-install.sh,命令如下:
            “tar –zxvf ACE+TAO+CIAO.tar.gz ACE_wrappers/ACE-install.sh”
            解 好后,會(huì)出來(lái)一個(gè)新的子目錄“ACE_wrappers”。此時(shí)可以先將ACE-install.sh移到外面的目錄來(lái):“mv /ACE_wrappers/ACE-install.sh .” “.”代表當(dāng)前目錄。當(dāng)然ACE-install.sh在什么路徑下是沒(méi)什么影響的,因?yàn)槲覀円獙?duì)ACE-install.sh的內(nèi)容進(jìn)行修改的,里面有 很多路徑要修改。現(xiàn)在在/home/my/ACE就有了ACE-install.sh,我們現(xiàn)在用vi對(duì)其進(jìn)行修改,修改前自己可以先備份一個(gè)。命令: “cp ACE-install.sh ACE-install.sh.bak”,“vi ACE-install.sh”先找到“MY_ACEDIR=${HOME}/aceconfig”,將其改成“MY_ACEDIR= /home/my/ACE”,就是改成我們自己建的、放有ACE.tar.gz文件的目錄,之后去掉前面的注釋“#”號(hào)。接著在下面一點(diǎn),找到 “MY_ACE_CONFIG=config-sunos5.4-sunc++-4.x.h”,將其修改成“MY_ACE_CONFIG=config- linux.h”,即改成linux下的配置文件。繼續(xù)改,找到“MY_ACE_GNU_MACROS=platform_sunos5_sunc++. GNU”,將其改成“MY_ACE_GNU_MACROS=platform_linux.GNU”。這個(gè)是各種操作系統(tǒng)平臺(tái)下的GNU宏文件設(shè)置。文件 修改完畢,保存退出“:wq”。
            4. 安裝ACE:
            此時(shí)應(yīng)該是在/home/my/ACE目錄下,我們執(zhí)行: h./ACE-install.sh
            此 后將是較長(zhǎng)時(shí)間的解包、編譯等待時(shí)間。這個(gè)過(guò)程將不會(huì)出現(xiàn)任何錯(cuò)誤,因?yàn)榘惭b腳本將為我們做很多事情,如:生成config.h,生成 platform_macros.GNU。我們不需要按ACE-install.html中說(shuō)的手工改東西:不用做連接“ln -s config-sunos5-sunc++-4.x.h config.h”,安裝腳本會(huì)給我們做好;(題外話:Windows中沒(méi)有文件連接這一說(shuō),所以要自己生成一個(gè)config.h文件,再在它的里面加一 句話“#include "ace/config-win32.h"”。)
            如果編譯中出現(xiàn)錯(cuò)誤,如“../apps/gperf”等,請(qǐng)編輯$ACE_ROOT/apps下的Makefile,將其中的有關(guān)“gperf”的部分注釋掉,這個(gè)東西只是一個(gè)例子,可以不去編譯它。
            強(qiáng)調(diào)一下,用ACE-install.sh來(lái)安裝,會(huì)編譯ACE、tests、apps等。最后會(huì)生成libACE.so及tests、apps下也會(huì)出來(lái)很多經(jīng)過(guò)編譯的文件。
            當(dāng)然如果你只是下載了ACE.tar.gz這樣的單個(gè)包來(lái)安裝,你可以手工改文件,再make,因?yàn)橹痪幾gACE,工作就少了很多,手工做還可以接受。
            ACE學(xué)習(xí)資料
            1. ACE 程序員指南:網(wǎng)絡(luò)與系統(tǒng)編程的實(shí)用設(shè)計(jì)模式 網(wǎng)絡(luò)與系統(tǒng)編程的實(shí)用設(shè)計(jì)模式   ACE Programmer's Guide practical Design Patterns for Network and Systems Programming
            (美)Stephen D. Huston,(美)James CE Johnson,(美)Umar Syyid著
            馬維達(dá) 譯 中國(guó)電力出版社
            2. C++網(wǎng)絡(luò)編程 卷1:運(yùn)用ACE和模式消除復(fù)雜性
            C++ Network Programming Volume 1 Mastering Complexity with ACE and Patterns
            [美]Douglas C.Schmidt,Stephen D.Huston /著 [美]Douglas C.Schmidt,Stephen D.Huston 著,於春景 譯   華中科技大學(xué)出版社
            3. C++網(wǎng)絡(luò)編程,卷2 基于ACE和框架的系統(tǒng)化復(fù)用
            C++ network Programming, Volume 2 Systematic Reuse with ACE and Frameworks
            Douglas C.Schmidt, Stephn D.Huston /著   | 馬維達(dá) 譯 電子工業(yè)出版社
            4. ACE的官方網(wǎng)站  http://www.cs.wustl.edu/~schmidt/ACE.html
            5. 馬維達(dá)的主頁(yè) http://www.flyingdonkey.com/
            6. RIVERACE公司 http://www.riverace.com
            7. 灰狐          http://www.huihoo.com/
            8.     ACE類(lèi)庫(kù)    http://dev.csdn.net/article/40/40700.shtm


            常見(jiàn)錯(cuò)誤
            錯(cuò)誤1:
            “Cannot open include file: ace/SOCK_Acceptor.h: No such file        or directory”
            解決方法:
            Project->settings->C/C++: Preprocessor的Additional include directories中加入$ACE_ROOT,如E:/ACE_wrappers
            錯(cuò)誤2:
            “You must link against multi-threaded libraries when using ACE (check your project settings)”
            解決方法:
            Project->settings->C/C++: Code Generation 的Use run-time library : Debug Multithreaded Dll
            錯(cuò)誤3:
            “error C2065: ACE_ERROR : undeclared identifier”
            “error C2065: ACE_DEBUG : undeclared identifier”
            解決方法:
            在原馬中加入#include ace/Log_Msg.h
            錯(cuò)誤4:“error C4716: ace_main_i : must return a value”
            解決方法:
            在main中加入return 0;
            錯(cuò)誤5:
            “error LNK2001: unresolved external symbol __declspec(dllimport) int __cdecl”
            解決方法:
            Project->settings->Link->Input: Object/library Modules加入aced.lib ,Additional Library Path中加入$ACE_ROOT\ace,如E:\ACE_wrappers\ace
            編譯client中遇到的問(wèn)題:
            錯(cuò)誤6:
            error C2039: sprintf : is not a member of ACE_OS
            解決方法:#include ace/OS_NS_stdio.h
            錯(cuò)誤7:error C2039: strlen : is not a member of ACE_OS
            解決方法:#include ace/OS_NS_string.h
            錯(cuò)誤8:無(wú)法找到動(dòng)態(tài)鏈接庫(kù)aced.dll于指定的路徑
            解決方法:為系統(tǒng)變量PATH加上D:\ACE_wrappers\bin
            靜態(tài)包含:
               工程-設(shè)置-C/C++-預(yù)處理程序定義中加入 ,ACE_AS_STATIC_LIBS
              
              
            例1server編譯后生成
            server.exe 16K   serverd.exe 97K     servers.exe 124K serversd.exe 669K
            (servers.exe較適合發(fā)布)

            例2 client編譯后生成
            client.exe 16K   clientd.exe 97K     clients.exe 124K clientsd.exe 669K
            (clients.exe較適合發(fā)布)

            測(cè)試 clients 127.0.0.1 1919
                   servers 1919


            如果編譯器支持64位,通過(guò)什么宏定義來(lái)區(qū)分64位還是32位阿?
            答:#define ver ((2>>31)>0?64:32)
            -------------------------------------------------------
            給ACE初哥初妹的話

            給ACE初哥初妹的話

            version 0.1.0 Stone jIang 2006-11-6

            下面列出了初學(xué)ACE必要的基礎(chǔ)知識(shí),希望能給初學(xué)ACE的朋友們一點(diǎn)幫助。特加上版本號(hào),這是為了歡迎批判,補(bǔ)充和修訂。

            1. C++/OOP (有一部分高手是C語(yǔ)言背景根深蒂固的,思考問(wèn)題不是面向?qū)ο螅@類(lèi)人學(xué)ACE需要先補(bǔ)補(bǔ)OOP思想)

            2. Design Pattern (ACE不僅僅是類(lèi)庫(kù),而是通過(guò)模式協(xié)同在一起的一系列相關(guān)的類(lèi),如果對(duì)設(shè)計(jì)模式熟悉,那么會(huì)用助于學(xué)習(xí)ACE)

            3. Framework (Framework應(yīng)該還不正式,相似的詞還可以是architecture,不管用啥詞語(yǔ),所要指出的是,ACE不僅僅是類(lèi)庫(kù),更是通過(guò)模式組合在一 起相互協(xié)作的類(lèi)形成的半成品。框架有別于類(lèi)庫(kù),后者通常是被動(dòng)的被程序員寫(xiě)的代碼調(diào)用,而框架則往往主動(dòng)地調(diào)用用戶(hù)實(shí)現(xiàn)的接口,即著名的好萊塢原則—— Don't call me , I will call you)

            4.Linux(我是Linux初不者,但自從我開(kāi)始進(jìn)入Linux 編程的時(shí)候,我就發(fā)現(xiàn),ACE許多精華源自Linux,以前對(duì)ACE理解有限,不知道為什么這樣,其實(shí)在Linux中能找到答案,ACE里閃爍著Linux的智慧。)

            5. Richard Stevens. (英年早逝的Richard,應(yīng)該是Douglas的良師益友,他的著作影響了Douglas,也就影響著ACE,這里要說(shuō)的是TCP/IP Illustrated ,其實(shí)Richard其他著作,像APUE都是大滋大補(bǔ)的)

            6. 沒(méi)有6了。如果你認(rèn)為有,一定告訴我。

            posted @ 2009-05-20 17:15 黃劍父 閱讀(533) | 評(píng)論 (0)編輯 收藏

            一.綁定過(guò)程

            1. DriverEntry

            中間層驅(qū)動(dòng)對(duì)上層來(lái)說(shuō),扮演一個(gè)Miniport Driver的角色,它在上邊沿向NDIS注冊(cè)一組Miniportxxx函數(shù);對(duì)于下層Miniport Driver來(lái)說(shuō),中間層驅(qū)動(dòng)扮演一個(gè)Protocol Driver的角色,因此它在下邊沿向NDIS注冊(cè)一組Protocolxxx函數(shù)。Miniport Driver通過(guò)調(diào)用NdisMRegisterMiniportNDIS注冊(cè)一組MiniportXxx函數(shù);Protocol Driver 通過(guò)調(diào)用 NdisRegisterProtocolNDIS注冊(cè)一組ProtocolXxx函數(shù)。

            首先通過(guò)調(diào)用NdisMInitializeWrapper(&NdisWrapperHandle, DriverObject, RegistryPath, NULL);來(lái)初始化NdisWrapperHandle,該句柄用來(lái)代表IM Driver的自身。

            接著調(diào)用NdisIMRegisterLayeredMiniport來(lái)向NDIS注冊(cè)一組MiniportXxx函數(shù),返回指向MiniportDriverHandle

            隨后調(diào)用NdisRegisterProtocol來(lái)向NDIS注冊(cè)一組Protocolxxx函數(shù),返回指向ProtocolProtHandle

            然后調(diào)用NdisIMAssociateMiniport(DriverHandle, ProtHandle);將兩者綁定。

            2. PtBindAdapter

                   NDIS在完成第一步之后,將會(huì)調(diào)用PtBindAdapter來(lái)完成對(duì)適配器的綁定(注意:此函數(shù)的調(diào)用次數(shù)是根據(jù)用戶(hù)電腦上的適配器數(shù)目而定的,一般至少有兩塊,會(huì)有一塊叫NDISWANIP),PtBindAdapter中有用的參數(shù)主要是DeviceNameSystemSpecific1,其中DeviceName是下層NIC驅(qū)動(dòng)的服務(wù)名,SystemSpecific1可以用來(lái)讀取注冊(cè)表中相關(guān)的值。(參考注冊(cè)表HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage下的Bind子鍵值)

                   首先調(diào)用NdisOpenProtocolConfiguration NdisReadConfiguration來(lái)讀取注冊(cè)表信息,然后初始化PADAPT pAdapt結(jié)構(gòu)體。

                   接著調(diào)用NdisOpenAdapter來(lái)將IM的下層協(xié)議驅(qū)動(dòng)(ProtHandle)綁定適配器。

                   調(diào)用NdisIMInitializeDeviceInstanceEx來(lái)觸發(fā)對(duì)MPInitialize的調(diào)用

            3. MPInitialize

            MpInitialize里面主要做三件事情:

            1). 判斷介質(zhì)類(lèi)型

            2). 調(diào)用NdisMSetAttributesEx設(shè)置一些特性

            3). 調(diào)用PtRegisterDevice函數(shù)向NDIS注冊(cè)設(shè)備

            4. PtRegisterDevice

                   PtRegisterDevice里,主要是設(shè)置IM Driver自己要處理的一些派遣例程和注冊(cè)設(shè)備名和設(shè)備符號(hào)鏈接名。要注意的是,這個(gè)函數(shù)提供的功能是為整個(gè)設(shè)備服務(wù)而不是每個(gè)適配器都需要注冊(cè),所以通過(guò)一個(gè)全局變量MiniportCount來(lái)控制。

            在這里,定義了PDRIVER_DISPATCH       DispatchTable[IRP_MJ_MAXIMUM_FUNCTION+1];

            然后如下的設(shè)置:DispatchTable[IRP_MJ_CREATE] = DevOpen;

                   接著調(diào)用NdisMRegisterDevice來(lái)注冊(cè)設(shè)備名和設(shè)備符號(hào)鏈接名。

             

            二.卸載過(guò)程

            1. PtUnbindAdapter

                   針對(duì)每個(gè)綁定的適配器,首先查看對(duì)IMminiport是否有還在排隊(duì)的請(qǐng)求,如果有,則先調(diào)用PtRequestComplete完成它(返回NDIS_STATUS_FAILURE),然后查看狀態(tài)是否為pending,是的話則調(diào)用NdisIMCancelInitializeDeviceInstance。再調(diào)用NdisIMDeInitializeDeviceInstance來(lái)卸載設(shè)備,在此會(huì)觸發(fā)對(duì)MPHalt的調(diào)用。

            2. MPHalt

                   MPHalt里,首先調(diào)用PtDeregisterDevice來(lái)卸載設(shè)備,然后調(diào)用NdisCloseAdapter關(guān)閉綁定的適配器。

            3. PtDeregisterDevice (MiniportCount == 0?)

                   PtDeregisterDevice 里,調(diào)用NdisMDeregisterDevice來(lái)卸載設(shè)備。同PtRegisterDevice類(lèi)似,要注意的是,這個(gè)函數(shù)提供的功能是為整個(gè)設(shè)備服務(wù)而不是每個(gè)適配器都需要注冊(cè),所以通過(guò)一個(gè)全局變量MiniportCount來(lái)控制。只有最后一個(gè)綁定的適配器卸載時(shí),才調(diào)用NdisMDeregisterDevice

            4. PtUnloadProtocol

                   CloseAdapterComplete完成后,NDIS會(huì)調(diào)用PtUnloadProtocol來(lái)完成下層綁定的協(xié)議驅(qū)動(dòng)(ProtHandle)的卸載,調(diào)用NdisDeregisterProtocol函數(shù)。

            5. PtUnload

                   首先,要說(shuō)明的是,在DriverEntry函數(shù)里,有注冊(cè)該函數(shù)(NdisMRegisterUnloadHandler(NdisWrapperHandle, PtUnload);)。該函數(shù)是整個(gè)卸載過(guò)程的最后一步,在這里,會(huì)繼續(xù)完成對(duì)綁定的上層miniport,下層的protocol的卸載(其實(shí)protocol的卸載在第4步已經(jīng)完成),調(diào)用如下兩個(gè)函數(shù)PtUnloadProtocolNdisIMDeregisterLayeredMiniport

            posted @ 2009-05-19 17:16 黃劍父 閱讀(321) | 評(píng)論 (0)編輯 收藏
            基于遠(yuǎn)程認(rèn)證的網(wǎng)絡(luò)中實(shí)現(xiàn)EAP認(rèn)證的方法,在百度的專(zhuān)利搜索上進(jìn)行搜索,能找到這篇文章。
            這個(gè)是華為對(duì)EAP認(rèn)證的一個(gè)發(fā)明專(zhuān)利,專(zhuān)利書(shū)對(duì)EAP認(rèn)證的步驟,和產(chǎn)生背景說(shuō)的非常清楚,是一篇很好的認(rèn)識(shí)802.1x認(rèn)證的文章。
            對(duì)以前的認(rèn)證技術(shù)進(jìn)行了分析,優(yōu)缺點(diǎn)都有說(shuō)明。
            目前現(xiàn)在大規(guī)模應(yīng)用的都是EAP認(rèn)證。
            posted @ 2009-04-15 15:03 黃劍父 閱讀(232) | 評(píng)論 (0)編輯 收藏

            集中回復(fù)001
               時(shí)寒冰

            最近,來(lái)信太多,無(wú)力一一回復(fù),以后選擇性的集中回復(fù)。——寒冰(暖之)

            1.問(wèn):如何看股市?
            答:超過(guò)7成的股票有階段性見(jiàn)頂跡象。

            2.問(wèn):農(nóng)民如何應(yīng)對(duì)未來(lái)的通貨膨脹?
            答:養(yǎng)豬。存糧。

            3.問(wèn):保8能否成功?
            答:能。一定能。
            問(wèn):你這樣確信?
            答:我對(duì)統(tǒng)計(jì)部門(mén)從來(lái)都有信心

            4.問(wèn):次貸危機(jī)誰(shuí)受害最深?
            答:中國(guó)。
            問(wèn):誰(shuí)先復(fù)蘇?
            答:美國(guó)。
            問(wèn):為何很多人看法正好相反。
            答:表演看多了。

            5.問(wèn):你如何看茅于軾廉租房不建廁所?
            答:他可能把廁所當(dāng)成奢侈品,把拉屎尿尿當(dāng)成高消費(fèi)了。
            問(wèn):茅于軾認(rèn)為,經(jīng)濟(jì)適用房給人帶來(lái)了貪污腐化的機(jī)會(huì),就應(yīng)該停掉經(jīng)濟(jì)適用房。
            答:各行各業(yè)都存在貪污腐化的機(jī)會(huì),都應(yīng)該停掉。
            問(wèn):其實(shí),只要有人類(lèi)存在就有腐化機(jī)會(huì)啊?
            答:根據(jù)茅老的理論,把人類(lèi)消滅就可以徹底解決這一問(wèn)題。
            問(wèn):那茅老呢?
            答:他留著。他是品德高尚的人,永遠(yuǎn)不會(huì)腐化。

            6.問(wèn):《中國(guó)新聞周刊》報(bào)道說(shuō),北京大學(xué)司法鑒定室主任孫東東表示“對(duì)那些老上訪專(zhuān)業(yè)戶(hù),我負(fù)責(zé)任地說(shuō),不說(shuō)100%吧,至少99%以上精神有問(wèn)題——都是偏執(zhí)型精神障礙”,你如何看?
            答:這位教授精神可能有問(wèn)題,很可能是偏執(zhí)型精神障礙。
            問(wèn):能否提出一些治療建議?
            答:建議看獸醫(yī)。

            7.問(wèn):你如何看中國(guó)人民銀行行長(zhǎng)提出最終取代美元的“超主權(quán)儲(chǔ)備貨幣”的設(shè)想?很多人評(píng)價(jià)說(shuō)是中國(guó)偉大的戰(zhàn)略調(diào)整。
            答:看不懂。
            問(wèn):為啥?
            答:一邊積極購(gòu)買(mǎi)美國(guó)國(guó)債等,一邊要廢美元,所以看不懂是啥戰(zhàn)略。

            8.問(wèn):你如何看濰坊市寒亭區(qū)采用下發(fā)“紅頭文件”的形式,向該區(qū)副科級(jí)以上干部攤派“售房任務(wù)”?
            答:官商勾結(jié)的模板。房子賣(mài)不動(dòng)了。
            問(wèn):最近賣(mài)得不是很火嗎?
            答:集中演出的回光返照。
               寫(xiě)于2009年4月3日下午兩點(diǎn)

            posted @ 2009-04-03 17:38 黃劍父 閱讀(123) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題
            共6頁(yè): 1 2 3 4 5 6 
            久久AV无码精品人妻糸列| 午夜不卡888久久| 久久久亚洲裙底偷窥综合| 狠狠色丁香婷婷久久综合五月| 久久天天躁狠狠躁夜夜avapp| 久久久久久亚洲精品无码| 久久ZYZ资源站无码中文动漫| 色综合合久久天天给综看| 精品乱码久久久久久久| 7777久久久国产精品消防器材 | 久久久久国产成人精品亚洲午夜| 高清免费久久午夜精品| 久久久久香蕉视频| 亚洲AV无码久久精品蜜桃| 超级97碰碰碰碰久久久久最新 | 色妞色综合久久夜夜| 精品99久久aaa一级毛片| 国产韩国精品一区二区三区久久| 久久99精品久久久久久水蜜桃| 久久伊人精品一区二区三区| 久久电影网2021| 久久国产精品久久| 伊人久久无码中文字幕| 久久婷婷五月综合成人D啪| 午夜精品久久影院蜜桃| 国内精品九九久久久精品| 久久久久国产精品人妻| 亚洲日本va午夜中文字幕久久| 免费精品久久久久久中文字幕| aaa级精品久久久国产片| 一本久久a久久精品亚洲| 一本色综合久久| 亚洲国产成人精品女人久久久 | 香蕉久久夜色精品国产尤物| 思思久久99热免费精品6| 国产伊人久久| 99久久99久久精品国产片果冻| 久久久久成人精品无码中文字幕| 亚洲伊人久久成综合人影院| 中文成人无码精品久久久不卡| 久久久久久亚洲精品无码|