Time of Update: 2018-12-07
1.代碼從MBR啟動(boot\freeldr\bootsect\dosmbr.asm)2.轉到硬碟開機磁碟分割(boot\freeldr\bootsect\fat32.asm),它負責尋找freeldr.sys。找到後載入到0000:8000h,然後找到freeldr.sys的入口地址。3.代碼跳轉到_mainCRTStartup代碼(boot\freeldr\freeldr\arch\i386\fathelp.asm)。4._mainCRTStartup是三個位元組的16位代碼,跳轉到boo
Time of Update: 2018-12-07
#include <stdio.h>#include <windows.h>#include <winioctl.h>int main(void){//LPCTSTR lpszDevice = "\\\\.\\PhysicalDrive0";LPCTSTR lpszDevice = "\\\\.\\C:";HANDLE hDevice =
Time of Update: 2018-12-07
BEGIN_MSG_MAP宏產生一個類函數,視窗函數會調用這個類函數。 調試的時候會發現當訊息來的時候,調試器會跟蹤到BEGIN_MSG_MAP和END_MSG_MAP()塊之間。另外還有個宏更好用,它是BEGIN_MSG_MAP_EX MESSAGE_HANDLER可以截獲訊息 COMMAND_ID_HANDLER可以截獲WM_COMMAND訊息 CHAIN_MSG_MAP可以將訊息轉到別的類 BEGIN_MSG_MAP(CMainFrame)
Time of Update: 2018-12-07
一邊情況下,COM組件會是這樣。 class ATL_NO_VTABLE CMath : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<CMath, &CLSID_Math>, public IMath, public IAdvancedMath { ... }
Time of Update: 2018-12-07
ATL用類封裝了Windows的操縱。但視窗函數必須是靜態函數,不可以是類函數。trunk可以將靜態函數,轉到類函數裡。ModuleHelper::AddCreateWndData(&m_thunk.cd, this); 可以將CWindowImp的的this指標存入trunck結構中。 CWindowImplBaseT< TBase, TWinTraits >* pThis = (CWindowImplBaseT< TBase, TWinTraits >*)
Time of Update: 2018-12-07
CImage會用到ATL中的CPoint等類,而這些類是全域的,沒有namespace,和WTL::CPoint會衝突。解決辦法在stdafx.h中#define WIN32_LEAN_AND_MEAN #define _WTL_USE_CSTRING #define _WTL_NO_WTYPES #include <atlbase.h> #include <atlapp.h> // base WTL classes extern
Time of Update: 2018-12-07
子例化需要繼承WTL中的CWindowImpl,例如 class CEditImpl : public CWindowImpl<CEditImpl, CEdit> { BEGIN_MSG_MAP(CEditImpl) MSG_WM_CONTEXTMENU(OnContextMenu) END_MSG_MAP() void OnContextMenu ( HWND hwndCtrl, CPoint
Time of Update: 2018-12-07
我搜速資料通常是使用Google,只有在有時Google不能使用時我才使用百度,為了方便我還把IE的首頁也設成了http://www.google.com/。 前幾天,我在部落格http://anjou.cnblogs.com/中添加了“訪問統計”功能。看了統計報告,真的是讓我很驚訝!統計報告顯示從搜尋引擎來訪我的部落格訪問記錄大部分來自百度。 從搜尋引擎來訪的統計報告如下(圖): 從搜尋引擎來訪,82%來自百度,18%來自Google。
Time of Update: 2018-12-07
使用IDispEventImpl或IDispEventSimpleImpl 對於IDispEventSimpleImpl,需要準備一個IDispEventImpl資料結構,並且用SINK_ENTRY_INFO 對於IDispEventImpl,需要指定lib,版本號碼等資訊。用宏SINK_ENTRY_EX
Time of Update: 2018-12-07
#include <windows.h>#include <stdio.h>typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;VOID WINAPIKeInitializeSpinLock( IN PKSPIN_LOCK SpinLock ){*SpinLock = 0;}__declspec( naked ) VOID WINAPIKeAcquireSpinLockAtDpcLevel(IN PKSPIN_LOCK
Time of Update: 2018-12-07
匯入類庫 #include <atlcom.h>#import "c:\atl3.dll" no_namespace, named_guids, raw_interfaces_only -------------------------------------------------------------------------------------------------::CoInitialize( NULL );// 如果在這裡進行 COM
Time of Update: 2018-12-07
對於ActiveX控制項所在的對話方塊,需要繼承public IDispEventImpl<IDC_IE, CMainDlg> 如 class CMainDlg : public CAxDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>, public CMessageFilter, public CIdleHandler, public
Time of Update: 2018-12-07
在部落格園xxx.cnblogs.com中添加訪問統計的方法:1. 到中國站長聯盟http://www.cnzz.com申請統計帳號(免費)。 2. 在你的帳號下添加一個網站。 3. 擷取統計代碼。 4. 然後進入你的部落格,管理 » Options » Configure » 頁尾Html代碼,粘貼你擷取的統計代碼。 5. 最後登入中國站長聯盟http://www.cnzz.com,就可以查看訪問統計了。 本文地址:http://www.cnblogs.com/anjou/archive/20
Time of Update: 2018-12-07
---------------------------------------------------#if _ATL_VER < 0x0700hRes = _Module.Init(NULL, hInstance);#elsehRes = _Module.Init(NULL, hInstance, &LIBID_ATLLib);#endifATLASSERT(SUCCEEDED(hRes));AtlAxWinInit();-----------------------------
Time of Update: 2018-12-07
首先先實現IDocHostUIHandlerDispatch介面 --------------------------------------------------------------------------------------------class ATL_NO_VTABLE CMyUIHandler : public CComObjectRootEx<CComSingleThreadModel>,public CComCoClass<CMyUIHandler&
Time of Update: 2018-12-07
在Ring0下,fs指向PCR,而PRCB是PCR的一個擴充。可以用!pcr和!prcb命令查看,例如:kd> !pcr KPCR for Processor 0 at ffdff000: Major 1 Minor 1 NtTib.ExceptionList: 80551158 NtTib.StackBase: 80551970 NtTib.StackLimit: 8054eb80
Time of Update: 2018-12-07
1. CriticalSection不需要進入核心就可以使用,速度比Mutex快100倍。2. CriticalSection只能用於同一個進程,而Mutex可以被不同進程使用 CriticalSection的虛擬碼CRITICAL_SECTION s;void EnterCriticalSection( CRITICAL_SECTION* s ){ int spin_count = s.max_count; while( --spin_count >= 0 ) {
Time of Update: 2018-12-07
MmInitializeMemoryManager函數是BootMain函數中很重要的一步。MmInitializeMemoryManager的前面會列印出一段log,代碼如下。#if DBG // Dump the system memory map DPRINTM(DPRINT_MEMORY, "System Memory Map (Base Address, Length, Type):\n"); while ((MemoryDescriptor =
Time of Update: 2018-12-07
MachHwDetect調用,它其實是個宏,對應i386,它對應著PcHwDetect。 SystemKey = DetectSystem(); /* Detect buses */ DetectPciBios(SystemKey, &BusNumber); DetectApmBios(SystemKey, &BusNumber); DetectPnpBios(SystemKey, &BusNumber); DetectIsaBios(SystemKey,
Time of Update: 2018-12-07
聲明extern POBJECT_TYPE *IoDriverObjectType;NTKERNELAPINTSTATUSObReferenceObjectByName(IN PUNICODE_STRING ObjectName,IN ULONG Attributes,IN PACCESS_STATE PassedAccessState OPTIONAL,IN ACCESS_MASK DesiredAccess OPTIONAL,IN POBJECT_TYPE ObjectType,IN