ie外掛的簡單總結 --- 發文於2013-12-13
主要關注對hao123推量影響大的因素,比如競品。
tp://msdn.microsoft.com/en-us/library/jj206442(v=vs.85).aspx IWebBrowser2介面 各種介面
html->解析(詞法,句法分析)為dom tree ->解析為Render Tree->遍歷渲染樹繪製每一個節點。
一.ie體系
webbrowser host(重用webbrowser控制元件的程式,例如ie)
|
shdocvw.dll(包含了webbrowser control),提供各種文件的瀏覽能力給上層宿主。
|
mshtml.dll(active 文件伺服器,但是卻可以作為其他控制元件的容器)
|
activex control, active script engine, java applet, plug-in ,html
二.瀏覽器修改三種方式:瀏覽器擴充套件(Shortcut menu extensions\ Custom toolbars\Explorer Bars\BHO),Active X控制元件,自己寫應用程式(比如自己寫瀏覽器)
三.webbrowser有四個介面:
IwebBrowser,IwebBrowserApp(方法和屬性典型地允許你控制瀏覽器視窗的使用者介面,比如顯示隱藏某個工具),IWebBrowser2.
他們的Document屬性返回活動文件的自動化實現 (IDispatch)。如果 HTML 當前顯示在WebBrowser, Document 屬性給出你存取 DHTML 物件模型的途徑.GetDocument 返回指向代表文件IDispatch 介面的指標.iwebbrowser2的ExecWB方法允許WebBrowser 開發者增加新的功能而不用建立新的引數。
四.通過ie匯出藉口修改ie行為的兩種方式。
1.invoke訊息迴圈 2.事件通知
開啟網頁呼叫順序
OnBeforeNavigate2
OnDownloadBegin
OnDownloadComplete
OnNavigateComplete
OnNavigateProgress
OnDocumentComplete
ie支援的事件在DISPID_DOWNLOADBEGIN,轉到定義 ExDispid.h中定義
五。匯出方法介紹
1.SetSite()方法
bho物件初始化,執行僅僅發生一次的任務。比如取得IWebBrowser2介面指標。 只調用此方法兩次,一次用於建立連線,另一次則是在瀏覽器退出時。
STDMETHODIMP CWipeImgBHO::SetSite(IUnknown* pUnkSite)
{
if (pUnkSite != NULL)
{
// 快取指向 IWebBrowser2 的指標。
HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_WebBrowser);
if(SUCCEEDED(hr))
{
//Regist Event from DWebBrowserEvents2
// 註冊以從 DWebBrowserEvents2 中彙集事件。
hr = DispEventAdvise(m_WebBrowser);
if (SUCCEEDED(hr))
{
m_Advised = TRUE;
}
}
}
else
{
if(m_Advised)
{
//Unregist event.
DispEventUnadvise(m_WebBrowser);
m_Advised = FALSE;
}
m_WebBrowser.Release();
}
return IObjectWithSiteImpl::SetSite(pUnkSite);
}
2.DownloadComplete事件
文件全部下載結束時觸發。
3.connect
截獲瀏覽器發出的事件,通過IConnectionPoint介面連線到瀏覽器上 並且實現傳遞介面IDispatch指標以處理各種事件.
一個COM 物件為了通客戶通訊, 物件自身必須支援一個或者多個外引介面.一個 COM 物件支援的外引介面是作為可連線物件引用. 要成為一個可連線物件,
COM物件必須實現IConnectionPointContainer 介面。通過此介面,客戶可認識到那些外引介面被伺服器支援. 外引介面實際通過連線點由客戶掛接入COM實現。
實現外引介面的客戶部分眾所周知是通過事件接收槽(event sink)實現的.
HRESULT CViewSource::Connect(void)
{
HRESULT hr;
CComPtr spCP;
//為Web瀏覽器事件而接收(receive)連線點
//呼叫IconnectionPointContainer 的方法 FindConnectionPoint 找出你想接收的事件
//m_spCPC = m_spWebBrowser2;
hr = m_spCPC->FindConnectionPoint(DIID_DWebBrowserEvent2, &spCP);
if (FAILED(hr))
return hr;
// 把事件處理器傳遞到容器。每次事件發生容器都將啟用我們實現的IDispatch介面上的相應的函式。
hr = spCP->Advise( reinterpret_cast(this), &m_dwCookie);
return hr;
}
4.invoke
BHO.IDispatch介面指標提供給瀏覽器。瀏覽器將回調IDispatch介面的Invoke() 方法,以事件的ID值作為第一引數:
HRESULT CViewSource::Invoke(DISPID dispidMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
VARIANT* pvarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{
if (dispidMember == DISPID_DOCUMENTCOMPLETE) {
OnDocumentComplete();
m_bDocumentCompleted = true;
}
}
pUnkSite->查詢IID_IWebBrowser2->IWebBrowser2 *->查詢IID_IConnectionPointContainer->IConnectionPointContainer*->
FindConnectionPoint(DIID_DWebBrowserEvents2,&pCP);->pCP->Advise((IUnknown*)&EventSink,&adviseCookie);->CEventSink::Invoke
所有的事件在win2k原始碼中搜索FireEvent
bu SHLWAPI!EnumInvokeCallback+0x3b 進入每一個bho
kd> g
Breakpoint 3 hit
SHLWAPI!EnumInvokeCallback:
001b:77f6251b 8bff mov edi,edi
kd> kv 100
ChildEBP RetAddr Args to Child
0012705c 77f55e62 0016c53c 001270dc 001270dc SHLWAPI!EnumInvokeCallback (FPO: [Non-Fpo]) -----ok 通過IDispatch::Invoke呼叫一個bho的invoke
00127080 77f55dd6 0016c53c 001270b8 77f55df4 SHLWAPI!EnumConnectionPointSinks+0x6f (FPO: [Non-Fpo]) -----ok 通過IConnectionPoint::EnumConnections列舉連線點,呼叫對應的EnumProc
001270cc 77f55fcc 00162cfc 001270dc 00000003 SHLWAPI!IConnectionPoint_InvokeIndirect+0x7e (FPO: [Non-Fpo]) -----ok 直接呼叫EnumConnectionPointSinks
0012710c 7e56804b 00162cfc 000000fa 001271d0 SHLWAPI!IConnectionPoint_InvokeWithCancel+0x3a (FPO: [Non-Fpo]) -----ok 直接呼叫IConnectionPoint_InvokeIndirect
001271e4 7e57a931 02a79600 00162cfc 001272a8 SHDOCVW!DoInvokeParamHelper+0x47 (FPO: [Non-Fpo]) -----ok 根據引數多少呼叫不同的invoke,帶不帶cancel.
001272d0 7e5a09f6 02a79600 0008028c 02a79600 SHDOCVW!FireEvent_BeforeNavigate+0x1dc (FPO: [Non-Fpo]) -----ok 開始呼叫bho的事件
00127318 7e3246bb 00161884 02a793c0 02a79600 SHDOCVW!CBaseBrowser2::FireBeforeNavigate3+0x9f (FPO: [Non-Fpo])
001283d4 7e2af600 02a793b0 00128548 02a79d34 mshtml!CWebOCEvents::BeforeNavigate2+0x262 (FPO: [Non-Fpo])
0012a58c 7e2af202 0012a648 0012a630 02a79e90 mshtml!CDoc::DoNavigate+0xb00 (FPO: [Non-Fpo]) -----ok--此步事件不同,呼叫NavigateHere(處理#標籤,還是要滾動垂直滾動條).ie已經執行,傳送WM_BROWSER_OPENURL訊息
0012a64c 7e2d6ad8 0012c700 00000000 02ca2160 mshtml!CDoc::FollowHyperlink+0x5f0 (FPO: [Non-Fpo]) -----ok 如果是位址列輸入url,則此處處理.
0012e704 7e2d6d4a 00000000 0020003a 00000000 mshtml!CFrameSite::OnPropertyChange_Src+0x4a6 (FPO: [Non-Fpo]) -----ok 屬性頁變化時觸發
0012e780 7e2d6c02 7e2b06f5 02cfd6e0 001c5633 mshtml!CFrameSite::CreateObject+0x367 (FPO: [Non-Fpo])---此處向下360不同
0012e784 7e2b06f5 02cfd6e0 001c5633 00000000 mshtml!CHtmIframeParseCtx::Execute+0xb (FPO: [0,0,0])
0012e7d0 7e27cf47 02cfe890 02cfd6e0 7e2a4b87 mshtml!CHtmParse::Execute+0x41 (FPO: [Uses EBP] [1,15,0])---此處向上360不同
0012e7dc 7e2a4b87 7e2a4ba5 001c5633 02cfd6e0 mshtml!CHtmPost::Broadcast+0xd (FPO: [1,0,0])
0012e898 7e2b101a 001c5633 02cfd6e0 029402d0 mshtml!CHtmPost::Exec+0x32f (FPO: [Uses EBP] [1,41,0])
0012e8b0 7e294be4 001c5633 029402d0 02cfd6e0 mshtml!CHtmPost::Run+0x55 (FPO: [Uses EBP] [1,0,0])
0012e8c0 7e295023 029402d0 001c5633 02cfd6e0 mshtml!PostManExecute+0x51 (FPO: [3,0,0])
0012e8d8 7e294fa6 02cfd6e0 00000001 7e293ffc mshtml!PostManResume+0x71 (FPO: [2,0,0])
0012e8e4 7e293ffc 02cfdaa0 02cfd6e0 0012e928 mshtml!CHtmPost::OnDwnChanCallback+0xc (FPO: [2,0,0])
0012e8f4 7e27cb3b 02cfdaa0 00000000 00000000 mshtml!CDwnChan::OnMethodCall+0x19 (FPO: [Non-Fpo]) -----ok
0012e928 7e278937 0012eac4 7e278852 00000000 mshtml!GlobalWndOnMethodCall+0x66 (FPO: [Non-Fpo]) -----ok for迴圈呼叫,處理匯出的延遲過程呼叫
0012ea5c 77d18734 000f024c 00008002 00000000 mshtml!GlobalWndProc+0x1e2 (FPO: [Non-Fpo]) -----ok 處理iehtml訊息,可以被匯出的事件用WM_METHODCALL.其他事件比如mousemove,buttondown自己處理.
0012ea88 77d18816 7e278852 000f024c 00008002 USER32!InternalCallWinProc+0x28
0012eaf0 77d189cd 00000000 7e278852 000f024c USER32!UserCallWinProcCheckWow+0x150 (FPO: [Non-Fpo]) ---- CShellBrowser2::WndProcBS,CShellBrowser2的主要視窗函式,分發dispatch訊息(呼叫webbrowse2的方法)
0012eb50 77d18a10 0012eb90 00000000 0012eb78 USER32!DispatchMessageWorker+0x306 (FPO: [Non-Fpo]) |
0012eb60 75f0d875 0012eb90 00000000 001571b0 USER32!DispatchMessageW+0xf (FPO: [Non-Fpo]) |
0012eb78 75f15218 0012eb90 0012ee98 00000000 BROWSEUI!TimedDispatchMessage+0x33 (FPO: [Non-Fpo]) -----ok 訊息迴圈 |
0012edd8 75f15389 001570a8 0012ee98 001570a8 BROWSEUI!BrowserThreadProc+0x336 (FPO: [Non-Fpo]) -----ok 初始化ie視窗類,視窗過程IEFrameWndProc,主訊息迴圈。
0012ee6c 75f15655 001570a8 001570a8 00000000 BROWSEUI!BrowserProtectedThreadProc+0x50 (FPO: [Non-Fpo]) -----ok try中呼叫BrowserThreadProc
0012fef0 7e5d8d7a 001570a8 00000000 00000000 BROWSEUI!SHOpenFolderWindow+0x22c (FPO: [Non-Fpo]) -----ok處理select開關,檢查是否可以用已經有的ie視窗。開啟執行緒呼叫BrowserProtectedThreadProc
0012ff10 00402372 001423ba 00000001 00000000 SHDOCVW!IEWinMain+0x129 (FPO: [Non-Fpo]) -----ok 初始化收藏夾,廢除類工廠物件,設定一些ie選項。
0012ff60 00402444 00400000 00000000 001423ba iexplore!WinMainT+0x2de (FPO: [Non-Fpo]) -----ok 載入相關dll
0012ffc0 7c817067 00000000 00000001 7ffde000 iexplore!_ModuleEntry+0x99 (FPO: [Non-Fpo]) -----ok
0012fff0 00000000 00402451 00000000 78746341 kernel32!BaseProcessStart+0x23 (FPO: [Non-Fpo])
kd> g
Breakpoint 2 hit
SHDOCVW!CBaseBrowser2::FireDownloadBegin:
001b:7e57a7d6 8bff mov edi,edi
kd> kv 100
ChildEBP RetAddr Args to Child
001283d8 7e2d81ca 00161880 001ae89c 00000000 SHDOCVW!CBaseBrowser2::FireDownloadBegin (FPO: [Non-Fpo])
001283f0 7e2d8143 00000000 00000000 001ae3d0 mshtml!CWebOCEvents::FireDownloadEvents+0xdc (FPO: [Non-Fpo])
0012a58c 7e2af202 0012a648 0012a630 02a79e90 mshtml!CDoc::DoNavigate+0xb70 (FPO: [Non-Fpo]) -----ok--此步事件不同,呼叫NavigateHere.
0012a64c 7e2d6ad8 0012c700 00000000 02ca2160 mshtml!CDoc::FollowHyperlink+0x5f0 (FPO: [Non-Fpo]) -----
0012e704 7e2d6d4a 00000000 0020003a 00000000 mshtml!CFrameSite::OnPropertyChange_Src+0x4a6 (FPO: [Non-Fpo])
0012e780 7e2d6c02 7e2b06f5 02cfd6e0 001c5633 mshtml!CFrameSite::CreateObject+0x367 (FPO: [Non-Fpo])
0012e784 7e2b06f5 02cfd6e0 001c5633 00000000 mshtml!CHtmIframeParseCtx::Execute+0xb (FPO: [0,0,0])
0012e7d0 7e27cf47 02cfe890 02cfd6e0 7e2a4b87 mshtml!CHtmParse::Execute+0x41 (FPO: [Uses EBP] [1,15,0])
0012e7dc 7e2a4b87 7e2a4ba5 001c5633 02cfd6e0 mshtml!CHtmPost::Broadcast+0xd (FPO: [1,0,0])
0012e898 7e2b101a 001c5633 02cfd6e0 029402d0 mshtml!CHtmPost::Exec+0x32f (FPO: [Uses EBP] [1,41,0])
0012e8b0 7e294be4 001c5633 029402d0 02cfd6e0 mshtml!CHtmPost::Run+0x55 (FPO: [Uses EBP] [1,0,0])
0012e8c0 7e295023 029402d0 001c5633 02cfd6e0 mshtml!PostManExecute+0x51 (FPO: [3,0,0])
0012e8d8 7e294fa6 02cfd6e0 00000001 7e293ffc mshtml!PostManResume+0x71 (FPO: [2,0,0])
0012e8e4 7e293ffc 02cfdaa0 02cfd6e0 0012e928 mshtml!CHtmPost::OnDwnChanCallback+0xc (FPO: [2,0,0])
0012e8f4 7e27cb3b 02cfdaa0 00000000 00000000 mshtml!CDwnChan::OnMethodCall+0x19 (FPO: [Non-Fpo])
0012e928 7e278937 0012eac4 7e278852 00000000 mshtml!GlobalWndOnMethodCall+0x66 (FPO: [Non-Fpo])
0012ea5c 77d18734 000f024c 00008002 00000000 mshtml!GlobalWndProc+0x1e2 (FPO: [Non-Fpo])
0012ea88 77d18816 7e278852 000f024c 00008002 USER32!InternalCallWinProc+0x28
0012eaf0 77d189cd 00000000 7e278852 000f024c USER32!UserCallWinProcCheckWow+0x150 (FPO: [Non-Fpo])
0012eb50 77d18a10 0012eb90 00000000 0012eb78 USER32!DispatchMessageWorker+0x306 (FPO: [Non-Fpo])
0012eb60 75f0d875 0012eb90 00000000 001571b0 USER32!DispatchMessageW+0xf (FPO: [Non-Fpo])
0012eb78 75f15218 0012eb90 0012ee98 00000000 BROWSEUI!TimedDispatchMessage+0x33 (FPO: [Non-Fpo])
0012edd8 75f15389 001570a8 0012ee98 001570a8 BROWSEUI!BrowserThreadProc+0x336 (FPO: [Non-Fpo])
0012ee6c 75f15655 001570a8 001570a8 00000000 BROWSEUI!BrowserProtectedThreadProc+0x50 (FPO: [Non-Fpo])
0012fef0 7e5d8d7a 001570a8 00000000 00000000 BROWSEUI!SHOpenFolderWindow+0x22c (FPO: [Non-Fpo])
0012ff10 00402372 001423ba 00000001 00000000 SHDOCVW!IEWinMain+0x129 (FPO: [Non-Fpo])
0012ff60 00402444 00400000 00000000 001423ba iexplore!WinMainT+0x2de (FPO: [Non-Fpo])
0012ffc0 7c817067 00000000 00000001 7ffde000 iexplore!_ModuleEntry+0x99 (FPO: [Non-Fpo])
0012fff0 00000000 00402451 00000000 78746341 kernel32!BaseProcessStart+0x23 (FPO: [Non-Fpo])
win7 堆疊
BhoProtect.dll!CBavBho::Invoke(long dispidMember=250, const _GUID & riid={...}, unsigned long lcid=0, unsigned short wFlags=1, tagDISPPARAMS * pDispParams=0x0318ab38, tagVARIANT * pVariant=Empty, tagEXCEPINFO * pExcepinfo=0x00000000, unsigned int * puArgErr=0x00000000) Line 86C++
ieframe.dll!EnumInvokeCallback() + 0x73f63 bytes
ieframe.dll!EnumConnectionPointSinks() + 0x73b91 bytes
[email protected]() + 0x88 bytes
ieframe.dll!DoInvokeParamHelper() + 0xc3 bytes
[email protected]() + 0x197 bytes
ieframe.dll!CBaseBrowser2::_FireBeforeNavigateEventAndStartNavProgress() + 0x88 bytes
ieframe.dll!CBaseBrowser2::_FireBeforeNavigateEvent() + 0x1b8 bytes
ieframe.dll!CBaseBrowser2::v_NavigateToPidl() + 0xc1 bytes
ieframe.dll!CBaseBrowser2::_OnGoto() + 0x213 bytes
ieframe.dll!CBaseBrowser2::_OnAsyncOperation() + 0x1e bytes
ieframe.dll!CBaseBrowser2::v_WndProc() + 0x1f2bb bytes
ieframe.dll!CShellBrowser2::v_WndProc() + 0x28f6 bytes
ieframe.dll!CShellBrowser2::s_WndProc() + 0x62 bytes
[email protected]() + 0x23 bytes
[email protected]() + 0xb3 bytes
[email protected]() + 0xe6 bytes
[email protected]() + 0xf bytes
ieframe.dll!CTabWindow::_TabWindowThreadProc() + 0x39b bytes
ieframe.dll!LCIETab_ThreadProc() + 0x2fd bytes
iertutil.dll!CIsoScope::RegisterThread() - 0x2b65 bytes
ieframe.dll!Detour_DefWindowProcA() + 0x66a96 bytes
[email protected]@12() + 0x12 bytes
[email protected]() + 0x27 bytes
[email protected]() + 0x1b bytes
查詢主頁堆疊
kd> g
Breakpoint 4 hit
SHDOCVW!URLSubRegQueryW:
*** ERROR: Symbol file could not be found. Defaulted to export symbols for Safehmpg.dll -
001b:7e606e01 e9cae7a091 jmp Safehmpg!SafehmpgHelper+0x11430 (100155d0)
kd> kv 100
ChildEBP RetAddr Args to Child
0012b410 7e5a79d5 7e55ae50 7e55f894 00000001 SHDOCVW!URLSubRegQueryW (FPO: [Non-Fpo])
0012c490 7e5a7b9d 0012c4b4 00000824 0000010e SHDOCVW!_GetStdLocation+0x94 (FPO: [Non-Fpo])
0012d500 7e5c5f95 00130144 00000000 00000000 SHDOCVW!SHDGetPageLocation+0x6d (FPO: [Non-Fpo])
0012d528 7e5c5fd6 00000000 0012e674 75f33f45 SHDOCVW!CIEFrameAuto::_GoStdLocation+0x28 (FPO: [Non-Fpo])
0012d534 75f33f45 0016a3c4 03699df8 00176220 SHDOCVW!CIEFrameAuto::GoHome+0x12 (FPO: [Non-Fpo])
0012e674 75f33655 00176220 03699df8 00000122 BROWSEUI!CInternetToolbar::Exec+0x1a4 (FPO: [Non-Fpo])
0012e6b8 75f33c01 00176220 00120240 0012e780 BROWSEUI!CInternetToolbar::_OnCommand+0xb9 (FPO: [Non-Fpo])
0012e718 77d18734 000d0180 00000111 000003f8 BROWSEUI!CInternetToolbar::SizableWndProc+0x340 (FPO: [Non-Fpo])
0012e744 77d18816 75f338c0 000d0180 00000111 USER32!InternalCallWinProc+0x28
0012e7ac 77d2927b 00000000 75f338c0 000d0180 USER32!UserCallWinProcCheckWow+0x150 (FPO: [Non-Fpo])
0012e7e8 77d292e3 00626010 00625fa8 000003f8 USER32!SendMessageWorker+0x4a5 (FPO: [Non-Fpo])
0012e808 77205d13 000d0180 00000111 000003f8 USER32!SendMessageW+0x7f (FPO: [Non-Fpo])
0012e870 772068ca 00080164 00000111 000003f8 comctl32!CReBar::_WndProc+0x11d (FPO: [Non-Fpo])
0012e894 77d18734 00080164 00000111 000003f8 comctl32!CReBar::s_WndProc+0x2c (FPO: [Non-Fpo])
0012e8c0 77d18816 7720689e 00080164 00000111 USER32!InternalCallWinProc+0x28
0012e928 77d2927b 00167ff0 7720689e 00080164 USER32!UserCallWinProcCheckWow+0x150 (FPO: [Non-Fpo])
0012e964 77d292e3 006260c0 00602af8 000003f8 USER32!SendMessageWorker+0x4a5 (FPO: [Non-Fpo])
0012e984 771f48aa 00080164 00000111 000003f8 USER32!SendMessageW+0x7f (FPO: [Non-Fpo])
0012e9ac 771f571b 0018ca40 00120240 00000202 comctl32!TBOnLButtonUp+0x122 (FPO: [Non-Fpo])
0012ea5c 77d18734 00120240 00000202 00000000 comctl32!ToolbarWndProc+0xb30 (FPO: [Non-Fpo])
0012ea88 77d18816 771f4beb 00120240 00000202 USER32!InternalCallWinProc+0x28
0012eaf0 77d189cd 00167ff0 771f4beb 00120240 USER32!UserCallWinProcCheckWow+0x150 (FPO: [Non-Fpo])
0012eb50 77d18a10 0012eb90 00000000 0012eb78 USER32!DispatchMessageWorker+0x306 (FPO: [Non-Fpo])
0012eb60 75f0d875 0012eb90 00000000 00168b70 USER32!DispatchMessageW+0xf (FPO: [Non-Fpo])
0012eb78 75f15218 0012eb90 0012ee98 00000000 BROWSEUI!TimedDispatchMessage+0x33 (FPO: [Non-Fpo])
0012edd8 75f15389 00168880 0012ee98 00168880 BROWSEUI!BrowserThreadProc+0x336 (FPO: [Non-Fpo])
0012ee6c 75f15655 00168880 00168880 00000000 BROWSEUI!BrowserProtectedThreadProc+0x50 (FPO: [Non-Fpo])
0012fef0 7e5d8d7a 00168880 00000000 00000000 BROWSEUI!SHOpenFolderWindow+0x22c (FPO: [Non-Fpo])
0012ff10 00402372 001423ba 000206c0 43010000 SHDOCVW!IEWinMain+0x129 (FPO: [Non-Fpo])
0012ff60 00402444 00400000 00000000 001423ba iexplore!WinMainT+0x2de (FPO: [Non-Fpo])
0012ffc0 7c817067 43010000 00000000 7ffdf000 iexplore!_ModuleEntry+0x99 (FPO: [Non-Fpo])
0012fff0 00000000 00402451 00000000 78746341 kernel32!BaseProcessStart+0x23 (FPO: [Non-Fpo])
相關推薦
ie外掛的簡單總結 --- 發文於2013-12-13
主要關注對hao123推量影響大的因素,比如競品。 tp://msdn.microsoft.com/en-us/library/jj206442(v=vs.85).aspx IWebBrowser2介面 各種介面 html-&
ndis協議驅動總結---發文於2013-12-30
協議驅動用於嗅探器,比如wincap就是協議驅動,不用於防火牆。 1.DriverEntry中 填寫協議特徵NDIS_PROTOCOL_CHARACTERISTICS,就是協議的回撥函式列表。 呼叫NdisRegisterProtocol註冊為協議驅動。 建
【年度總結】2018年年度自我總結——寫於2018.12.31
目錄 正文 開學後成功脫單還拿了獎 小程式開發? 從頭開始學習前端 後端也要學! 資料庫語言?? 大二開始了 危機感愈來愈強 與冠軍失之交臂 總結 這是我大學以來第一次寫年度總結(可能是受到一些大佬的影響吧)。 希望通過總結自己,取長補短,使自己更好地
bootstrap jquery 外掛 簡單總結
主要分為 Bootstrap 基本結構、Bootstrap CSS、Bootstrap 佈局元件和 Bootstrap 外掛幾個部分 下面是內建的jQuery外掛 通過data API 呼叫 因此不需要寫js 程式碼 也可以通過js執行,因此都會有一些外掛執行或完成後觸
Docker 1 12新功能探索(7) 服務編排三劍客簡單總結
box ask -o 新功能 tab pri thead csdn 更新 docker內置編排功能和目前成熟的編排工具相比可能還略顯弱勢,但是畢竟它是docker原生態的工具,占有地利的得天獨厚的優勢。同時目前內置swarm/node/service“三劍客”所組成的
Asp.Net頁面傳值的方法簡單總結【原創】
tid 周期 () 路徑 coo webp 方式 qpi 優點 1、QueryString 當頁面上form按照get的方式向頁面發送請求數據的時候,web server會將請求數據放入 一個QEURY_STRING的環境變量中,然後通過QeueryString方法
HTTP 簡單總結
查詢 tcp/ip 網絡傳輸 優點 臨時性 modified unix系統 因特網 判斷 1. 一次完整的HTTP事務是怎樣的一個過程? 基本流程: a. 域名解析 b. 發起TCP的3次握手 c. 建立TCP連接後發起http請求 d. 服務器端響應htt
經典sql 語句總結,轉載於http://www.iteye.com/topic/1117462
agent 作業 方案 插入 delet 連接參數 將不 彈出 mic 一、基礎1、說明:創建數據庫CREATE DATABASE database-name 2、說明:刪除數據庫drop database dbname3、說明:備份sql server--- 創建 備份數
集合——list簡單總結
style list 刪除 link 數據 排隊 http arr es2017 一.介紹list 1.什麽是list? list是一個有序的序列(collection),它是一個接口,繼承了collection,因此了除了包含父類的方法以外,還有專屬的方法。 list有三
Java數據類型簡單總結
引用數據類型 8bit 完全 class 取值 自定義類 ava als 地址傳遞 Java數據類型簡單總結 一:Java數據類型總的分為兩大類:基本數據類型和引用數據類型。 基本數據類型:byte、short、int、long、float、double、char、bool
shell簡單總結--符號
shell 符號 一、shell簡介 shell的作用是解釋執行用戶的命令,用戶輸入一條命令,shell就解釋一行【交互式】。另一種執行命令的方式是【批處理】,用戶事先寫一個shell腳本,其中有很多條命令,shell一次把這些命令執行完。shell程序從腳本中一行一行讀取並執行這些命令,相當於一個
java集合,泛型簡單總結
容易 對象 並且 集合 需要 api文檔 array object 類型轉換 1.set中裝的對象是沒順序不可以重復。重復的判斷:只要兩個對象equals相等就行了。(要理解的是,並非重復了就報錯,只是存儲時候只有一個,輸出的時候只會輸出一個。) 2.list中的數據對象有
vue.js的簡單總結
使用 pac number date 來源 生命周期 tee require 函數 這篇文章主要對vue的理解進行總結: 參考來源:http://blog.csdn.net/generon/article/details/72482844 vue.js是一套構建用戶界面的漸
js jquery 上傳文件格式大小判斷簡單總結
大小 .text 錯誤 script console class hint pat asc 大家好我是床前明月光,疑是地上霜 // html <a href="javascript:;" class="file">添加附件 <input type
自動化構建工具—gulp的用法簡單總結
修復 git func 文件夾 open lean 發生 遍歷 nod 把之前用到的gulp總結整理下,有時候說不出來的,就寫出來吧,做個筆記,以後也可以慢慢補充 cnpm i --save-dev gulp 把nodejs模塊寫到package.json配置文件中
django restframework 簡單總結
超鏈接 pre 寫法 users objects lin 查詢 添加 destroy 官方文檔:http://www.django-rest-framework.org/ model.py class Snippet(models.Model): created
HTML5 拖拽簡單總結
默認 scrip default wid red 圖形 sta lin start //感覺拖拽挺有意思,剛開始玩,簡單總結一下,有什麽不對的地方歡迎指正,謝謝 後續繼續更新<!DOCTYPE html><html lang="en"><hea
laravel 設計思想簡單總結
不同 模式 解決 clas 容器 markdown 配置 依賴關系 調用 服務容器 laravel框架中 服務容器是整個系統功能調度配置的核心,在系統運行過程中動態的為系統提供需要的服務 從而實現了解耦 控制反轉(IOC) 控制反轉是一種設計模式 主要解決了系統組件之間的相
類----簡單總結
closed 重寫 註意 person 簡單 table 實例化 containe line 類的構成 1 class 類名: 2 def __init__(self,參數1,參數2): 3 self.對象的屬性1 = 參數1 4
數據庫使用簡單總結
使用 select 插入數據 null 劃線 outer ast mes drop 創建一個表 create table user( id number(4), password char(4), name char(20), createTime dat