ntdll.dll学习总结

582 篇文章 3 订阅 ¥99.90 ¥99.00
101 篇文章 2 订阅

ntdll.dll

ntdll.dll描述了windows本地NTAPI的接口。是重要的Windows NT内核级文件。当Windows启动时,ntdll.dll就
驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。
中文名 ntdll.dll 外文名 NT Layer DLL 版    本 6.3.9600.17736 系统DLL文件 是 属    于 Windows NT 

内核
目录
1 概述
2 详细介绍
3 函数调用
4 其他定义的部分函数如下
▪ Csr系列
▪ Dbg系列 调试函数
▪ Ki系列
▪ Ldr系列 Loader APIs
▪ Nls系列
▪ Nt系列及其他

5 英文解释


概述
DLL 文件名:ntdll.dll
DLL 名称: NT Layer DLL
ntdll.dll
ntdll.dll(20张)
描述:
ntdll.dll是NT操作系统重要的模块。[2] 
ntdll.dll是Windows系统从ring3到ring0的入口。位于Kernel32.dll和user32.dll中的所有win32 API 最终都
是调用ntdll.dll中的函数实现的。ntdll.dll中的函数使用SYSENTRY进入ring0,函数的实现实体在ring0中。

常见错误: File Not Found, Missing File, Exception Errors
详细介绍
打开NTDLL.dll,发现CRT的许多基本函数都是在这里实现的。包括qsort,ceil这样的函数,还有strcpy堆的释放
,进程管理,似乎都是在ntdll中实现。
用户模式的代码在调用系统内核函数的时候,首先把一个叫做system call number的数放在EAX中,把参数放在
其它的寄存器中了。然后调用INT 2E中断。但是大部分应用程序并不需要直接这么做。通常都是在调用
kernel32.dll等时由他们来调用INT 2E.
内核模式的代码,做法稍微有点不同。他们通常调用由NTOSKRNL.EXE导出的NTDLL.dll中Zw开头的那一系列函数
,比如 ZwWaitForSingleObject, 反之,如果是用户级代码需要调用内核,就会利用INT 2E调用
WaitForSingleObject.对于许多函数的批量调用,你会明显发现 Zw族要比Rtl族效率高很多。
ntdll.dll中的大部分函数都是在MSDN中找不到描述的,因为这些函数介于Windows API与内核API之间,微软并
未公开全部的内核函数.
函数调用编辑
对于一部分得知其定义形式的函数,可以这样调用:

//C language  
//以进程挂起函数NtSuspendProcess为例   
//define function 
typedef LONG (NTAPI * _____NtSuspendProcess)(IN HANDLE);   
//Get Process Address (from ntdll.dll) 
_____NtSuspendProcess NtSuspendProcess=(_____NtSuspendProcess)GetProcAddress(GetModuleHandle
("ntdll"),"NtSuspendProcess");  
 //In function "main"
//Suspend itself:
 
NtSuspendProcess(GetCurrentProcess());
   
 //代码在Mingw g++ 4.8.7(Windows 8.1 64bit)编译通过
 
//运行时程序理应有SE_DEBUG_NAME特权

其他定义的部分函数如下
Csr系列
(configuration status register? Command and Status Register?)
CsrAllocateCaptureBuffer
CsrAllocateMessagePointer
CsrCaptureMessageBuffer
CsrCaptureMessageMultiUnicodeStringsInPlace
CsrCaptureMessageString
CsrCaptureTimeout
CsrClientCallServer
CsrClientConnectToServer
CsrFreeCaptureBuffer
CsrGetProcessId
CsrIdentifyAlertableThread
CsrNewThread
CsrProbeForRead
CsrProbeForWrite
CsrSetPriorityClass
Dbg系列 调试函数
DbgBreakPoint
DbgPrint
DbgPrintEx
DbgPrintReturnControlC
DbgPrompt
DbgQueryDebugFilterState
DbgSetDebugFilterState 6
DbgUiConnectToDbg
DbgUiContinue
DbgUiConvertStateChangeStructure
DbgUiDebugActiveProcess
DbgUiGetThreadDebugObject
DbgUiIssueRemoteBreakin
DbgUiRemoteBreakin
DbgUiSetThreadDebugObject
DbgUiStopDebugging
DbgUiWaitStateChange
DbgUserBreakPoint
Ki系列
KiRaiseUserExceptionDispatcher
KiUserApcDispatcher
KiUserCallbackDispatcher
KiUserExceptionDispatcher
Ldr系列 Loader APIs
(共34个API,NTDLL APIs)
LoadResource
LdrAccessResource
LdrAlternateResourcesEnabled
DisableThreadLibraryCalls
LdrDisableThreadCalloutsForDll
LdrEnumResources
LdrFindAppCompatVariableInfo
LdrFindEntryForAddress
EnumResourceTypesW
LdrFindResourceDirectory_U
FindResourceExA
LdrFindResource_U
LdrFlushAlternateResourceModules
LdrGetAlternateResourceModuleHandle
GetModuleHandleForUnicodeString
LdrGetDllHandle
GetProcAddress
LdrGetProcedureAddress
LdrInitializeThunk
LoadLibraryEx (LOAD_LIBRARY_AS_DATAFILE)
LdrLoadAlternateResourceModule
LoadLibrary
LdrLoadDll
LdrProcessRelocationBlock
LdrQueryApplicationCompatibilityGoo
LdrQueryImageFileExecutionOptions
LdrQueryProcessModuleInformation
LdrRelocateImage
ExitProcess
LdrShutdownProcess
ExitThread
LdrShutdownThread
LdrUnloadAlternateResourceModule
FreeLibrary
LdrUnloadDll
LdrVerifyImageMatchesChecksum
LdrVerifyMappedImageMatchesChecksum
Nls系列
代码页管理(National Language Support)
NlsAnsiCodePage
NlsMbCodePageTag
NlsMbOemCodePageTag
Nt系列及其他
(从process explorer上找到的一些函数)
NtQuerySystemInformation
NtQuerySymbolicLinkObject
NtQueryDirectoryObject
NtOpenSymbolicLinkObject
NtOpenDirectoryObject
NtQueryObject
NtQueryInformationProcess
NtSetInformationProcess
NtQuerySemaphore
NtQuerySection
NtQueryEvent
NtQueryMutant
NtResumeThread
NtSuspendThread
NtOpenThread
NtQueryInformationThread
NtQueryVirtualMemory
RtlCreateQueryDebugBuffer
RtlQueryProcessDebugInformation
RtlDestroyQueryDebugBuffer
RtlTimeToTimeFields
PropertyLengthAsVariant[5] 
英文解释
NTDLL.DLL exports the WindowsNative API. The Native API is the interface used by user-mode 
components of the operating system that must run without support from Win32 or other API 
subsystems. Most of this API is implemented inNTDLL.DLLand at the upper edge ofntoskrnl.exe(and 
its variants), and the majority of exported symbols within these libraries are prefixedNt, for 
exampleNtDisplayString. Native APIs are also used to implement many of the "kernel APIs" or "base 
APIs" exported by KERNEL32.DLL.The large majority of Windows applications do not call NTDLL.DLL 
directly.
Applications that arelinkeddirectly against this library are known asnative applications; the 
primary reason for their existence is to perform tasks that must run early in the system startup 
sequence before the Win32 subsystem is available. An obvious but important example is the 
creation of the Win32 subsystem process,csrss.exe. Before the csrss.exe process exists, no Win32 
processes may be created, therefore the process that creates it (Smss.exe, the "session manager") 

must be a native application.csrss.exeitself is a native application.
Despite having an ".exe" file extension, native applications cannot be executed by the user (or 
any program in the Win32 or other subsystems). An example is theautochk.exebinary that 
runschkdskduring the system initialization "Blue Screen". Other prominent examples are the 
services that implement the various subsystems, such ascsrss.exe.
UnlikeWin32applications, native applications instantiate within the Kernel runtime code 
(ntoskrnl.exe) and so they must have a different entry point (NtProcessStartup, rather than(w)
(Win)MainCRTStartupas is found in a Win32 application),obtain their command-line arguments via a 
pointer to an in-memory structure, manage their own memory using theRtlheap API,(which the Win32 
heap APIs are just wrappers around -- no real difference there) and return execution with a call 
toNtTerminateProcess(as opposed toExitProcess). A common library linked with Native applications 
is nt.lib, which contains startup code for Native applications, similar to how the C runtime 
provides startup code for Win32 apps.
Though most of the API is undocumented, Native Applications can be built using theWindows Driver 
Development Kit; manyAntiVirusand other utility software vendors incorporate Native Applications 

within their products, usually to perform some boot-time task that cannot be carried out 

inuserspace.
========

挂起一个进程  


怎样才能挂起一个进程。线程很好办,因为系统提供了 SuspendThread() API 可以直接调用

。忘了是昨天还是前天,在用

十六进制方式查看大名鼎鼎的 Process Explorer 的时候,无意之中看到了一个原来没见过的 API 名字:

NtSuspendProcess(),望文知义,连弱智都应该能看出来这个函数的作用。与之相对应的还有 

NtResumeProcess()。他们的原型为:
 
NTSTATUS NtSuspendProcess(HANDLE hProcess);
NTSTATUS NtResumeProcess(HANDLE hProcess);
 
从 NTDLL.DLL 中找到地址就可以直接用了。另外关于查询一个进程当前是不是处于被挂起状态我还不知道,估

计跑不了 NtQueryInformationProcess()。
========

深层解析最核心的dll:NTDLL.dll


打开NTDLL.dll,惊奇的发现原来CRT的许多基本函数居然都是在这里实现的!甚至包括qsort,ceil这样的函数,

还有臭名昭著的 strcpy(严格来讲,这只能怪使用者不当心)。堆的释放,进城管理,似乎都是在这。于是,

我决定,仔细察看以下它,这1410个函数是做什么的. 

  用户模式的代码在调用系统内核函数的时候,首先把一个叫做system call number的数放在EAX中,把参数

放在其它的寄存器中了。然后调用INT 2E中断。但是大部分应用程序并不需要直接这么做。通常都是在调用

kernel32.dll等时由他们来调用INT 2E. 

  内核模式的代码,做法稍微有点不同。他们通常调用由NTOSKRNL.EXE导出的NTDLL.dll中Zw开头的那一系列

函数,比如 ZwWaitForSingleObject, 反之,如果是用户级代码需要调用内核,就会利用INT 2E调用

WaitForSingleObject.对于许多函数的批量调用,你会明显发现 Zw族要比Rtl族效率高很多。 

  可惜ntdll.dll中的大部分函数都是undocumented. 
  对于一部分得知其定义形式的函数,可以这样调用: 
  1.先将NTDLL.DLL读入 LoadLibrary(TEXT(/"NTDLL.dll/")) 
  2.利用GetProcAddress 获取其函数入口地址 
  3.利用得到的函数指针调用 
  但是可以大致的分为几类吧 
  1 PropertyLengthAsVariant 它被排在了第一号,但是我就是不明白它是做什么的 
  2 Csr(configuration status register? Command and Status Register?)系列 
  CsrAllocateCaptureBuffer CsrAllocateMessagePointer CsrCaptureMessageBuffer 

CsrCaptureMessageMultiUnicodeStringsInPlace CsrCaptureMessageString CsrCaptureTimeout 

CsrClientCallServer CsrClientConnectToServer CsrFreeCaptureBuffer CsrGetProcessId 

CsrIdentifyAlertableThread CsrNewThread CsrProbeForRead CsrProbeForWrite CsrSetPriorityClass 
  3 Dbg系列 调试函数 
  DbgBreakPoint DbgPrint DbgPrintEx DbgPrintReturnControlC DbgPrompt DbgQueryDebugFilterState 

DbgSetDebugFilterState DbgUiConnectToDbg DbgUiContinue DbgUiConvertStateChangeStructure 

DbgUiDebugActiveProcess DbgUiGetThreadDebugObject DbgUiIssueRemoteBreakin DbgUiRemoteBreakin 

DbgUiSetThreadDebugObject DbgUiStopDebugging DbgUiWaitStateChange DbgUserBreakPoint 
  4 ki系列 
  KiRaiseUserExceptionDispatcher 
  KiUserApcDispatcher 
  KiUserCallbackDispatcher 
  KiUserExceptionDispatcher 
  5 Ldr系列 Loader APIs,共34个 
  API 
  NTDLL APIs 
  LoadResource 
  LdrAccessResource 
  Ldr*****nateResourcesEnabled 
  DisableThreadLibraryCalls 
  LdrDisableThreadCalloutsForDll 
  LdrEnumResources 
  LdrFindAppCompatVariableInfo 
  LdrFindEntryForAddress 
  EnumResourceTypesW 
  LdrFindResourceDirectory_U 
  FindResourceExA 
  LdrFindResource_U 
  LdrFlush*****nateResourceModules 
  LdrGet*****nateResourceModuleHandle 
  GetModuleHandleForUnicodeString 
  LdrGetDllHandle 
  GetProcAddress 
  LdrGetProcedureAddress 
  LdrInitializeThunk 
  LoadLibraryEx (LOAD_LIBRARY_AS_DATAFILE) 
  LdrLoad*****nateResourceModule 
  LoadLibrary 
  LdrLoadDll 
  LdrProcessRelocationBlock 
  LdrQueryApplicationCompatibilityGoo 
  LdrQueryImageFileExecutionOptions 
  LdrQueryProcessModuleInformation 
  LdrRelocateImage 
  ExitProcess 
  LdrShutdownProcess 
  ExitThread 
  LdrShutdownThread 
  LdrUnload*****nateResourceModule 
  FreeLibrary 
  LdrUnloadDll 
  LdrVerifyImageMatchesChecksum 
  LdrVerifyMappedImageMatchesChecksum 
  6 Nls(National Language Support)系列 代码页管理 
  NlsAnsiCodePage 
  NlsMbCodePageTag 
  NlsMbOemCodePageTag 
  7 Nt系列 共285个,大部分都是kernel32.dll,user32.dll等的核心实现 
  NtCreateFile, NtOpenFile, NtClose, NtWaitForSingleObject 是kernel32.dll中许多用户级代码的核心

实现。 
  NTSTATUS NtClose( HANDLE Handle); 
  竟然是CloseHandle 的原身!唯一的缺点是该函数并没有导出库,如果要调用,就必须使用

GetProcAddress 来获得其函数指针然后调用。 
  NtCreateFile 可以说是DDK的核心 
  RtlUnwind initiates an unwind of procedure call frames 
  结构化异常(Structured Exception Handling, SEH )的 核心。 
  NTSTATUS NtWaitForSingleObject( HANDLE Handle, BOOLEAN Alertable, PLARGE_INTEGER Timeout); 
  Waits until the specified object attains a state of signaled 
  我想,信号同步等,应该与之有莫大的联系吧 
  8 pfx 不明白 
  PfxFindPrefix 
  PfxInitialize 
  PfxInsertPrefix 
  PfxRemovePrefix 
  9 RestoreEm87Context SaveEm87Context 
  10 rtl系列 共506个。我想,rtl应该是runtime library的缩写吧。一个很庞大的函数族,里面包含像 

RtlCreateUserProcess 这样的一些很基本的函数,通常供内核模式的driver等调用 
  下面是一部分示例 
  APIs Forwarded to NTDLL 
  API 
  Destination 
  DeleteCriticalSection 
  Forwarded to NTDLL.RtlDeleteCriticalSection 
  EnterCriticalSection 
  Forwarded to NTDLL.RtlEnterCriticalSection 
  HeapAlloc 
  Forwarded to NTDLL.RtlAllocateHeap 
  HeapFree 
  Forwarded to NTDLL.RtlFreeHeap 
  HeapReAlloc 
  Forwarded to NTDLL.RtlReAllocateHeap 
  HeapSize 
  Forwarded to NTDLL.RtlSizeHeap 
  LeaveCriticalSection 
  Forwarded to NTDLL.RtlLeaveCriticalSection 
  RtlFillMemory 
  Forwarded to NTDLL.RtlFillMemory 
  RtlMoveMemory 
  Forwarded to NTDLL.RtlMoveMemory 
  RtlUnwind 
  Forwarded to NTDLL.RtlUnwind 
  RtlZeroMemory 
  Forwarded to NTDLL.RtlZeroMemory 
  SetCriticalSectionSpinCount 
  Forwarded to NTDLL.RtlSetCriticalSection- SpinCount 
  TryEnterCriticalSection 
  Forwarded to NTDLL.RtlTryEnterCriticalSection 
  VerSetConditionMask 
  Forwarded to NTDLL.VerSetConditionMask

      11 VerSetConditionMask 用于确认系统信息 
  The VerSetConditionMask function sets the bits of a 64-bit value to indicate the comparison 

operator to use for a specified operating system version attribute. This function is used to 

build the dwlConditionMask parameter of the VerifyVersionInfo function. 
  12 Zw系列 共284个。前面已经说过,为可执行性系统服务提供内核模式的入口, 为NTOSKRNL.EXE 提供实


现。由于是内核模式,所以在执行的时候并不检查用户是否有执行权限 
  13 内部函数 共116个。具体作用不明,很底层的东西。无法查到任何相关资料。无法得知与其相关的任何

信息。 
  _CIcos _CIlog _CIpow _CIsin _CIsqrt __eCommonExceptions __eEmulatorInit __eF2XM1 __eFABS 

__eFADD32 __eFADD64 __eFADDPreg __eFADDreg __eFADDtop __eFCHS __eFCOM __eFCOM32 __eFCOM64 

__eFCOMP __eFCOMP32 __eFCOMP64 __eFCOMPP __eFCOS __eFDECSTP __eFDIV32 __eFDIV64 __eFDIVPreg 

__eFDIVR32 __eFDIVR64 __eFDIVRPreg __eFDIVRreg __eFDIVRtop __eFDIVreg __eFDIVtop __eFFREE 

__eFIADD16 __eFIADD32 __eFICOM16 __eFICOM32 __eFICOMP16 __eFICOMP32 __eFIDIV16 __eFIDIV32 

__eFIDIVR16 __eFIDIVR32 __eFILD16 __eFILD32 __eFILD64 __eFIMUL16 __eFIMUL32 __eFINCSTP __eFINIT 

__eFIST16 __eFIST32 __eFISTP16 __eFISTP32 __eFISTP64 __eFISUB16 __eFISUB32 __eFISUBR16 

__eFISUBR32 __eFLD1 __eFLD32 __eFLD64 __eFLD80 __eFLDCW __eFLDENV __eFLDL2E __eFLDLN2 __eFLDPI 

__eFLDZ __eFMUL32 __eFMUL64 __eFMULPreg __eFMULreg __eFMULtop __eFPATAN __eFPREM __eFPREM1 

__eFPTAN __eFRNDINT __eFRSTOR __eFSAVE __eFSCALE __eFSIN __eFSQRT __eFST __eFST32 __eFST64 

__eFSTCW __eFSTENV __eFSTP __eFSTP32 __eFSTP64 __eFSTP80 __eFSTSW __eFSUB32 __eFSUB64 __eFSUBPreg 

__eFSUBR32 __eFSUBR64 __eFSUBRPreg __eFSUBRreg __eFSUBRtop __eFSUBreg __eFSUBtop __eFTST __eFUCOM 

__eFUCOMP __eFUCOMPP __eFXAM __eFXCH __eFXTRACT __eFYL2X __eFYL2XP1 __eGetStatusWord 
  14 一些CRT的基本函数 共131个 主要是字符串管理,还有些基本的数学函数 
  __isascii __iscsym __iscsymf __toascii _alldiv _alldvrm _allmul _alloca_probe _allrem _allshl 

_allshr _atoi64 _aulldiv _aulldvrm _aullrem _aullshr _chkstk _fltused _ftol _i64toa _i64tow _itoa 

_itow _lfind _ltoa _ltow _memccpy _memicmp _snprintf _snwprintf _splitpath _strcmpi _stricmp 

_strlwr _strnicmp _strupr _tolower _toupper _ui64toa _ui64tow _ultoa _ultow _vsnprintf 

_vsnwprintf _wcsicmp _wcslwr _wcsnicmp _wcsupr _wtoi _wtoi64 _wtol abs atan atoi atol bsearch 

ceil cos fabs floor isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace 

isupper iswalpha iswctype iswdigit iswlower iswspace iswxdigit isxdigit labs log mbstowcs memchr 

memcmp memcpy memmove memset pow qsort sin sprintf sqrt sscanf strcat strchr strcmp strcpy 

strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr strtol strtoul swprintf tan 

tolower toupper towlower towupper vDbgPrintEx vDbgPrintExWithPrefix vsprintf wcscat wcschr wcscmp 

wcscpy wcscspn wcslen wcsncat wcsncmp wcsncpy wcspbrk wcsrchr wcsspn wcsstr wcstol wcstombs 

wcstoul 

  众所周知,NT中有很多为公布的api,习惯上大家喜欢把他们称为native api.上面就是一部分。 
  那么所谓的native api究竟是用来做什么的呢? 
  他是主要是用来在受控的状态下调用kernel mode的代码。说的简单点,就是一个通往kernel 的 

interface.举个简单的例子,user mode 下,用户是不能直接访问硬件的。即使是像打开,关闭文件这样的简

单操作,也需要先从user mode 切换至 kernel mode.然后交给内核来执行。如果这一系列操作都交给用户来做

,这中间存在一个很大的问题。那就是user mode和kernel mode的切换,管理的问题。如果仅仅是的内核,问

题不大。可是现在的OS不仅都是多进程,而且大部分UNIX kernel 都是抢占式可重入的。这意味着当你从user 

mode 切换至kernel mode 正在执行 一个很重要的操作时,会突然被另一个应用程序打断。此时进程同步就显

得极为重要。 
  比如,两个进程A和B,A先进入内核,需要向软盘写入一个500k的文件。读取软盘A的剩余空间,800k,够了
,但此时被挂起。B进程进入,写入一个400k的文件,然后退出。然后A继续执行。然后。。。 
  更常见的是,A先读取某资源V的数量,数量为1。然后B进入,占用此资源并将V-1,然后B被挂起,A继续进
行,A又将V-1,V成了-1… 
  最理想的方式是,将诸如此类的操作设为atomic operation.中间不允许打断。但是很多时候这样是不可能

的,而且就算可能,性能会打很大的折扣。 

  于是对于长时期的操作,采取lock,semaphore,Signal等来同步或控制,短操作,就设定一个critical 
region.一旦进入critical region的process是不可被中断的。 

  Kernel mode 下的这些同步与控制非常复杂,为了系统安全,大部分程序都是运行在user mode 下,然后

由kernel 提供一个interface,交给用户来调用。Unix下这些interface都是well documented,比如很出名的

read(),write().但是windows下,如上文所提到,ntdll.dll中提供有 NtCreateFile, NtOpenFile, NtClose三

个重要的函数,MSDN中对其仅有少许的说明。 
  这其实是与NT的架构相关的。NT的kernel,可以算是一个modified microkernel.“Instead of supporting 

one basic operating system API, NT implements several”。Windows NT 利用其特有的Environment 

subsystems方式很有效的实现了这一点。整个Environment subsystems由CSRSS.EXE控制。(CSRSS.EXE这个进程

你可以在tasklist中看见。你可以用windows sdk中的debug tools在kernel debug mode下debug它,然后选

stop,它就会被强行中止掉。^_^).windows core apis被分在一个个的独立的dll中来实现

(kernel.dll,usr32.dll,gdi32.dll…)。然后这些dll交给 CSRSS.EXE来调度以给用户提供所需的接口。当用户

发出调用请求的时候,首先由CSRSS.EXE找到该dll,然后dll对于其请求的处理,会执 行以下的一个或多个步骤

。 
  1。立即返回。 
  2。向windows server发送一条消息,请求帮助 。 
  3。调用native api 去执行该请求。 
  首先,对于第一种情况,当且仅当该dll本身就可以完成该请求,比如执行GetCurrentProcess(). 
  对于第二种情况,也很少需要。仅仅是必须要windows server参与的时候,才会如此。比如
CreateProcess()。该dll本身是无法完成的。 
  第三种情况也就算最常见的了。 
  通常是先由用户调用kernel.dll(or gdi32.dll,user.dll,etc),然后由之调用ntdll.dll,然后ntdll.dll调
用kernel mode 的KiSystemService,由之来完成具体操作。
========
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
第1章 Windows应用程序开发入门..........................................................................................16 1.1 第一个实例程序............................................................................................................16 1.1.1 sta rt.exe..............................................................................................................16 1.1.2 Windows API......................................................................................................17 1.1.3 程序入口函数.....................................................................................................17 1.1.4 start.c代码分析...................................................................................................17 1.2 编译代码........................................................................................................................18 1.2.1 安装Visual Studio...............................................................................................18 1.2.2 安装Microsoft Platform SDK.............................................................................19 1.2.3 集成Microsoft Platform SDK与Visual C++速成版...........................................20 1.2.4 Vista SDK与Visual Studi0 2008.........................................................................21 1.2.5 Visual Studio专业版或团队系统版...................................................................22 1.2.6 使用图形化IDE建立工程、进行编译..............................................................22 1.2.7 “解决方案”与“工程”..........................................................................................23 1.2.8 使用命令行工具编译.........................................................................................23 第2章 Windows API概要..........................................................................................................24 2.1 Windows数据类型.........................................................................................................24 2.1.1 Windows数据类型示例......................................................................................25 2.1.2 Windows数据类型与标准C数据类型的关系...................................................28 2.1.3 Windows数据类型与Windows API...................................................................28 2.1.4 Windows中的数据结构......................................................................................29 2.2 Windows API的功能分类.............................................................................................29 2.2.1 系统基本服务.....................................................................................................29 2.2.2 系统管理.............................................................................................................31 2.2.3 用户界面.............................................................................................................31 2.2.4 图像和多媒体.....................................................................................................34 2.2.5 网络.....................................................................................................................34 2.2.6 系统安全.............................................................................................................34 2.2.7 其他功能.............................................................................................................35 2.3 Windows API核心DLL..................................................................................................35 2.3.1 Kerne132.dll........................................................................................................35 2.3.2 User32.dll............................................................................................................36 2.3.3 Gdi32.dll.............................................................................................................36 2.3.4 标准C函数..........................................................................................................36 2.3.5 其他Dll................................................................................................................36 2.4 Unicode和多字节..........................................................................................................36 2.4.1 W版本和A版本的API........................................................................................38 2.4.2 Unicode与ASGII的转换.....................................................................................39 2.5 对Windows程序设计规范的建议.................................................................................39 第3章开发工具配置与使用.....................................................................................................41 3.1 使用Visual C/C++编译链接工具...............................................................................41 3.1.1 编译器cl.exe.......................................................................................................41 3.1.2 资源编译器rc.exe...............................................................................................46 3.1.3 链接器link.exe....................................................................................................47 3.1.4 其他工具.............................................................................................................53 3.1.5 编译链接工具依赖的环境变量.........................................................................54 3.1.6 示例:使用/D选项进行条件编译.....................................................................57 3.2 使用Platform SDK.........................................................................................................58 3.2.1 Platform SDK的目录结构与功能......................................................................58 3.2.2 为编译链接工具设置环境变量.........................................................................59 3.2.3 Platform SDK工具集..........................................................................................61 3.2.4 Windows Vista SDK............................................................................................63 3.3 编写Makefile.................................................................................................................63 3.3.1 使用nmake.exe构建工程....................................................................................63 3.3.2 Makefile实例......................................................................................................65 3.3.3 注释.....................................................................................................................65 3.3.4 宏.........................................................................................................................66 3.3.5 描述块:目标、依赖项和命令.........................................................................68 3.3.6 makefile预处理...................................................................................................69 3.3.7 在Platform SDK的基础上使用nmake...............................................................70 3.4 使用WinDbg调试..........................................................................................................72 3.4.1 安装WinDbg.......................................................................................................72 3.4.2 编译可调试的程序.............................................................................................73 3.4.3 WinDbg命令.......................................................................................................74 3.4.4 调试过程演示.....................................................................................................74 3.5 集成开发环境Visual Studio..........................................................................................77 3.5.1 工程类型选择与配置.........................................................................................77 3.5.2 Visual Studio快捷方式.......................................................................................79 3.5.3 生成项目.............................................................................................................79 3.5.4 调试.....................................................................................................................79 3.5.5 选项与设置.........................................................................................................80 3.6 开发环境配置总结........................................................................................................81 第4章文件系统.........................................................................................................................82 4.1 概述...............................................................................................................................82 4.1.1 文件系统的基本概念.........................................................................................82 4.1.2 文件系统主要API..............................................................................................83 4.2 磁盘和驱动器管理........................................................................................................85 4.2.1 遍历卷并获取属性.............................................................................................85 4.2.2 操作驱动器挂载点.............................................................................................91 4.2.3 判断光驱中是否有光盘.....................................................................................96 4.2.4 获取磁盘分区的总容量、空闲容量、簇、扇区信息.....................................98 4.3 文件和目录管理..........................................................................................................101 4.3.1 删除、复制、重命名、移动文件...................................................................102 4.3.2 创建、打开、读写文件,获取文件大小.......................................................105 4.3.3 创建目录...........................................................................................................111 4.3.4 获取程序所在的目录、程序模块路径,获取和设置当前目录...................112 4.3.5 查找文件、遍历指定目录下的文件和子目录...............................................115 4.3.6 递归遍历目录树...............................................................................................118 4.3.7 获取、设置文件属性和时间...........................................................................120 4.4 内存映射文件..............................................................................................................125 4.4.1 使用Mapping File提高文件读写的效率.........................................................125 4.4.2 通过Mapping File在进程间传递和共享数据.................................................130 4.4.3 通过文件句柄获得文件路径...........................................................................133 4.5 总结..............................................................................................................................136 第5章内存管理.......................................................................................................................137 5.1 Windows内存管理原理...............................................................................................137 5.1.1 基本概念...........................................................................................................137 5.1.2 分页与分段内存管理、内存映射与地址转换...............................................138 5.1.3 进程的内存空间...............................................................................................140 5.1.4 虚拟内存布局、内存的分工、堆与栈...........................................................142 5.1.5 内存的保护属性和存取权限...........................................................................142 5.1.6 本章API列表....................................................................................................142 5.2 堆管理..........................................................................................................................144 5.2.1 获取堆句柄、分配与再分配堆.......................................................................144 5.2.2 获取堆中内存块的大小信息...........................................................................148 5.2.3 释放内存、销毁堆...........................................................................................149 5.3 全局(Global)和局部(Local)内存管理.........................................................................151 5.3.1 Global函数........................................................................................................151 5.3.2 Local函数........................................................................................................152 5.3.3 使用全局和局部函数分配和释放内存、改变内存块属性...........................153 5.4 虚拟内存管理..............................................................................................................154 5.4.1 虚拟地址空间与内存分页...............................................................................154 5.4.2 分配和释放可读可写的虚拟内存页面...........................................................154 5.4.3 修改内存页面状态和保护属性、将页面锁定在物理内存中.......................157 5.4.4 管理其他进程的虚拟内存...............................................................................158 5.5 内存操作与内存信息管理..........................................................................................159 5.5.1 复制充、移动、清零内存块、防止缓冲区溢出...........................................159 5.5.2 获得当前系统内存使用情况...........................................................................161 5.5.3 判断内存指针的可用性...................................................................................162 5.6 各种内存分配方式的关系与比较..............................................................................163 5.6.1 标准C内存管理函数与Windows内存管理API的关系...................................163 5.6.2 功能性区别.......................................................................................................164 5.6.3 效率的区别.......................................................................................................164 第6章进程、线程和模块.......................................................................................................165 6.1 基本概念......................................................................................................................165 6.1.1 应用程序与进程...............................................................................................165 6.1.2 控制台应用程序与图形用户界面应用程序...................................................166 6.1.3 动态链接库、模块...........................................................................................166 6.1.4 线程、纤程与作业...........................................................................................167 6.1.5 权限与优先级...................................................................................................167 6.2 进程管理......................................................................................................................167 6.2.1 创建进程、获取进程相关信息、获取启动参数...........................................168 6.2.2 编写控制台程序和图形用户界面应用程序...................................................173 6.2.3 获取和设置环境变量.......................................................................................173 6.3 线程、纤程..................................................................................................................176 6.3.1 创建线程、退出线程、获取线程信息...........................................................177 6.3.2 挂起、恢复、切换、终止线程.......................................................................179 6.3.3 创建远程线程、将代码注入其他进程中执行...............................................182 6.3.4 创建纤程、删除纤程、调度纤程...................................................................185 6.3.5 纤程与线程的互相转换...................................................................................186 6.4 进程状态信息..............................................................................................................191 6.4.1 PS API与Tool help API.....................................................................................191 6.4.2 遍历系统中的进程...........................................................................................193 6.4.3 列举进程的模块、线程...................................................................................197 6.4.4 进程的堆使用、内存占用、虚拟内存大小,页面错误情况.......................199 6.5 动态链接库..................................................................................................................200 6.5.1 加载、释放DLL、通过句柄获取DLL相关信息............................................201 6.5.2 编写动态链接库、导出函数...........................................................................201 6.5.3 创建动态链接库工程,配置DLL编译链接选项...........................................203 6.5.4 运行时动态获取DLL导出函数地址并调用...................................................204 6.5.5 声明导出函数、创建lib库,为其他模块提供导入表调用接口...................205 6.5.6 通过构建导入表调用DLL导出函数...............................................................206 第7章线程同步.......................................................................................................................207 7.1 基本原理......................................................................................................................207 7.1.1 线程同步的过程...............................................................................................207 7.1.2 同步对象...........................................................................................................208 7.1.3 等待函数...........................................................................................................208 7.2 同步对象示例..............................................................................................................209 7.2.1 使用事件对象(Event).......................................................................................209 7.2.2 使用互斥对象(Mutex)......................................................................................214 7.2.3 使用信号量控制访问共享数据的线程数量...................................................217 7.2.4 使用可等待计时器(Timer)...............................................................................221 7.3 等待进程和线程的执行完成......................................................................................224 第8章服务...............................................................................................................................225 8.1 基本概念......................................................................................................................225 8.1.1 服务控制器(SCM)............................................................................................225 8.1.2 服务程序...........................................................................................................226 8.1.3 服务控制管理程序...........................................................................................226 8.1.4 系统服务管理工具...........................................................................................226 8.1.5 服务的属性.......................................................................................................226 8.2 编写服务程序..............................................................................................................227 8.2.1 入口函数...........................................................................................................227 8.2.2 服务主函数.......................................................................................................227 8.2.3 控制处理函数...................................................................................................228 8.3 实现对服务的控制和管理..........................................................................................231 8.3.1 创建、删除服务...............................................................................................231 8.3.2 启动、停止服务,向服务发送控制请求.......................................................234 8.3.3 管理服务状态、配置服务、服务的依赖关系...............................................237 第9章图形用户界面...............................................................................................................244 9.1 字符界面程序..............................................................................................................244 9.1.1 基本概念...........................................................................................................244 9.1.2 控制台读写.......................................................................................................246 9.1.3 控制台字体、颜色等属性,操作屏幕缓存...................................................249 9.1.4 控制台事件.......................................................................................................259 9.2 图形用户界面:基本概念..........................................................................................262 9.2.1 窗口...................................................................................................................262 9.2.2 窗口类...............................................................................................................263 9.2.3 消息和消息处理函数.......................................................................................263 9.2.4 控件...................................................................................................................263 9.2.5 资源...................................................................................................................264 9.2.6 对话框...............................................................................................................264 9.3 图形用户界面:窗口..................................................................................................264 9.3.1 注册窗口类.......................................................................................................266 9.3.2 创建窗口...........................................................................................................267 9.3.3 窗口消息处理函数...........................................................................................269 9.3.4 窗口属性、位置和大小...................................................................................273 9.3.5 窗口显示方式...................................................................................................274 9.3.6.线程消息队列和消息循环...............................................................................274 9.4 图形用户界面:控件..................................................................................................275 9.4.1 Tree View控件..................................................................................................275 9.4.2 为Tree View控件增加节点..............................................................................277 9.4.3 Tree View右键菜单..........................................................................................278 9.4.4 List View控件...................................................................................................280 9.4.5 为List View控件增加分栏...............................................................................282 9.4.6 为List View控件增加项...................................................................................283 9.4.7 文本框控件.......................................................................................................284 9.4.8 为文本框控件设置文字...................................................................................285 9.5 界面资源......................................................................................................................286 9.5.1 资源脚本(.rc).................................................................................................286 9.5.2 资源ID定义和头文件.......................................................................................289 9.5.3 在程序中使用资源...........................................................................................289 9.6 菜单..............................................................................................................................290 9.6.1 菜单资源和菜单句柄.......................................................................................290 9.6.2 动态增加、删除、设置菜单及菜单项...........................................................291 9.6.3 菜单消息处理...................................................................................................292 9.7 对话框..........................................................................................................................292 9.7.1 创建对话框.......................................................................................................292 9.7.2 对话框消息处理函数.......................................................................................293 第10章系统信息的管理.........................................................................................................295 10.1 Windows系统信息.....................................................................................................295 10.1.1 获取系统版本.................................................................................................295 10.1.2 获取计算机硬件信息.....................................................................................297 10.1.3 获取系统目录等信息.....................................................................................299 10.1.4 用户名、计算机名、域名.............................................................................300 10.1.5 处理系统颜色信息、尺度信息等.................................................................302 10.1.6 鼠标、键盘等外设信息.................................................................................303 10.2 时间信息....................................................................................................................304 10.2.1 设置、获取系统时间.....................................................................................304 10.2.2 获取开机至现在持续的时间.........................................................................305 10.2.3 文件时间与系统时间的转换.........................................................................305 10.3 注册表........................................................................................................................306 10.3.1 注册表的作用及组织形式.............................................................................306 10.3.2 键、子键、键属性及键值的相关操作.........................................................307 10.3.3 列举注册表项及键值.....................................................................................309 10.3.5 设置随程序启动而启动的调试器(任何程序).........................................312 10.3.6 指定程序崩溃实时调试器.............................................................................312 第11章进程间通信.................................................................................................................313 11.1 邮槽( MailSlot ).........................................................................................................313 11.1.1 创建邮槽、从邮槽中读取消息.....................................................................313 11.1.2 通过邮槽发送消息.........................................................................................317 11.2 管道(Pipe)..................................................................................................................318 11.2.1 创建命名管道.................................................................................................318 11.2.2 管道监听.........................................................................................................320 11.2.3 使用异步I/O进行读写....................................................................................321 11.2.4 关闭管道实例.................................................................................................325 11.2.5 客户端.............................................................................................................325 11.3 剪贴板........................................................................................................................328 11.3.1 获取、设置剪贴板数据.................................................................................328 11.3.2 监视剪贴板.....................................................................................................334 11.3.3 剪贴板数据格式.............................................................................................343 11.4 数据复制消息(WM_COPYDATA)...........................................................................345 11.4.1 数据发送端.....................................................................................................345 11.4.2 数据接收端.....................................................................................................348 11.5 其他进程间通信方式................................................................................................350 11.5.1 动态数据交换(DDE)和网络动态数据交换(NDDE).....................................350 11.5.3 Windows Socket..............................................................................................351 第12章 Windows Shell程序设计............................................................................................352 12.1 Windows Shell目录管理...........................................................................................352 12.1.1 Shell对目录和文件的管理形式.....................................................................353 12.1.2 “我的文档”等特殊目录相关操作.................................................................353 12.1.3 绑定、遍历、属性获取.................................................................................354 12.1.4 浏览文件对话框.............................................................................................357 12.2 文件协助(File Associations)......................................................................................358 12.2.1 文件类型相关注册表键值.............................................................................359 12.2.2 为文件指定默认打开程序.............................................................................359 12.2.3 定制文件类型的图标.....................................................................................360 12.3 Shell扩展.................................................................................................................361 12.3.1 对象及概念.....................................................................................................361 12.3.2 CLSID,处理例程的GUID...........................................................................362 12.3.3 注册Shell扩展.................................................................................................363 12.3.4 COM程序开发基础........................................................................................364 12.3.5 编写Handler程序............................................................................................364 12.3.6 Shell扩展程序的调试.....................................................................................380 12.3.7 总结.................................................................................................................381 12.4 任务栏通知区域(Tray)图标......................................................................................381 12.4.1 创建图标窗口.................................................................................................382 12.4.2 创建图标和图标菜单.....................................................................................386 12.4.4 弹出气泡通知.................................................................................................391 12.4.5 动态图标.........................................................................................................393 12.4.6 其他功能.........................................................................................................395 第13章 Windows GDI.............................................................................................................398 13.1 GDI编程接口概述.....................................................................................................398 13.1.1 Windows GDI的功能......................................................................................398 13.1.2 链接库与头文件.............................................................................................398 13.2 设备上下文(DC)\输出操作与图形对象................................................................398 13.2.1 设备上下文类型与关联设备.........................................................................399 13.2.2 图形对象的作用及与DC的关系...................................................................399 13.2.3 各类图形对象的具体属性与作用.................................................................401 13.2.4 绘制、填充、写入等图形输出操作.............................................................402 13.2.5 修剪与坐标变换.............................................................................................403 13.2.6 设备上下文的图形模式.................................................................................403 13.3 一个最简单的GDI程序.............................................................................................404 13.3.1 示例.................................................................................................................404 13.3.2 DC的操作.....................................................................................................406 13.3.3 颜色的表示.....................................................................................................407 13.3.4 图形对象:画刷和画笔.................................................................................407 13.3.5 输出操作:绘制图形和线条.........................................................................409 13.4 文字和字体................................................................................................................409 13.4.1 选择、设置字体.............................................................................................412 13.4.2 选择字体图形对象.........................................................................................413 13.4.3 文字的颜色.....................................................................................................413 13.4.4 输出文字.........................................................................................................413 13.4.5 DC图形模式设置...........................................................................................414 13.4.6 遍历字体.........................................................................................................415 13.4.7 为系统安装、删除字体文件.........................................................................417 13.5 绘制线条....................................................................................................................417 13.5.1 选择画笔对象.................................................................................................417 13.5.2 直线.................................................................................................................418 13.5.3 绘制任意曲线.................................................................................................418 13.5.4 跟踪鼠标轨迹.................................................................................................418 13.5.5 弧线.................................................................................................................424 13.6 绘制图形....................................................................................................................424 13.6.1 填充颜色与边缘勾勒.....................................................................................425 13.6.2 绘制矩形、椭圆、圆角矩形.........................................................................425 13.6.3 椭圆弓形和椭圆扇形.....................................................................................431 13.6.4 多边形.............................................................................................................431 13.6.5 REGT结构及对RECT的操作........................................................................432 13.7 位图操作....................................................................................................................434 13.7.1 截取屏幕、保存位图文件.............................................................................434 13.7.2 将位图显示在界面上.....................................................................................439 13.8 区域(Regions)、路径(Paths)与修剪(Clip)操作.......................................................442 13.8.1 区域的创建及形状、位置等属性.................................................................442 13.8.2 区域边沿、区域填充、反转与勾勒操作.....................................................443 13.8.3 组合、比较、移动等操作.............................................................................446 13.8.4 点击测试(Hit Testing)....................................................................................447 13.8.5 路径的创建与操作.........................................................................................451 13.8.6 路径转换为区域.............................................................................................452 13.8.7 使用区域和路径进行修剪操作,限制输出.................................................452 13.9 坐标变换....................................................................................................................458 13.9.1 缩放.................................................................................................................459 13.9.2 旋转.................................................................................................................460 13.10 调色板......................................................................................................................460 第14章网络通信与配置.........................................................................................................463 14.1 Socket通信.................................................................................................................463 14.1.1 客户端.............................................................................................................464 14.1.2 服务端.............................................................................................................469 14.1.3 处理并发的客户端连接.................................................................................475 14.1.4 网络通信的异步I/O模式................................................................................476 14.2 IP Helper....................................................................................................................476 第15章程序安装与设置.........................................................................................................483 15.1.1 makecab.exe....................................................................................................483 15.1.2 压缩多个文件.................................................................................................484 15.1.3 Cabinet软件开发工具包(CABSDK)..............................................................485 15.2 编写INF文件.............................................................................................................486 15.2.1 INF文件格式..................................................................................................486 15.2.2 Install节...........................................................................................................488 15.2.3 CopyFiles和AddReg等安装过程...................................................................488 15.2.4 源路径和目的路径.........................................................................................489 15.2.5 字符串表.........................................................................................................489 15.3 安装程序setup.exe的编号.........................................................................................489 15.4 使用msi文件进行安装..............................................................................................493 15.4.1 Windows Installer Service...............................................................................493 15.4.2 msi文件的创建与修改工具orca.exe..............................................................495 15.4.3 准备工作.........................................................................................................496 15.4.4 编辑表组.........................................................................................................496 第16章设备驱动管理与内核通信.........................................................................................497 16.1 设备管理....................................................................................................................497 16.1.1 列举设备接口.................................................................................................497 16.1.2 监控设备的加载和卸载.................................................................................504 16.2 I/o控制、内核通信...................................................................................................509 16.2.1 加载驱动程序.................................................................................................509 16.2.2 控制驱动程序、与驱动程序进行通信.........................................................516 16.3 编写设备驱动程序....................................................................................................519 16.3.1 驱动程序开发包:DDK................................................................................520 16.4 I/O模式,同步与异步..............................................................................................525 第17章用户、认证和对象安全.............................................................................................527 17.1 基本概念....................................................................................................................527 17.1.1 访问令牌、权限和用户标识.........................................................................527 17.1.2 进程的系统操作权限.....................................................................................528 17.1.3 安全对象.........................................................................................................528 17.1.4 访问控制列表(ACL)......................................................................................529 17.2 安全机制程序示例....................................................................................................530 17.2.1 列举进程访问令牌内容和权限.....................................................................530 17.2.2 修改进程的权限.............................................................................................536 17.2.3 列举安全对象的安全描述符.........................................................................537 17.2.4 修改安全描述符.............................................................................................543 17.3 用户............................................................................................................................544 17.3.1 创建用户.........................................................................................................544 17.3.2 用户组.............................................................................................................545 17.3.3 删除用户.........................................................................................................546 17.3.4 列举用户和用户组、获取用户信息.............................................................547 第18章 Windows API的内部原理..........................................................................................554 18.1 关于API的补充说明.................................................................................................554 18.1.1 Windows API的版本演进和Vista新增API....................................................554 18.1.2 64位操作系统的接口..................................................................................555 18.2 Windows系统中的对象封装.....................................................................................555 18.2.1 什么是对象.....................................................................................................555 18.2.2 面向对象的思想.............................................................................................555 18.2.3 Windows系统中的对象:内核对象、GDI对象等.......................................556 18.3 WiFidows程序设计参考:文档资源与样例代码....................................................556 18.3.1 SDK文档和MSDN.........................................................................................556 18.3.2 SDK示例代码.................................................................................................556 18.4 x86平台程序函数调用原理.....................................................................................557 18.4.1 函数调用的真实过程.....................................................................................557 18.4.2 函数调用约定.................................................................................................561 18.4.3 为什么通过参数返回数据时只能使用指针.................................................562 18.4.4 缓冲区溢出.....................................................................................................562 18.4.5 程序运行错误的调试技巧.............................................................................562 18.5 可执行程序结构与AIPI函数接口内部机理............................................................563 18.5.1 Windows可执行程序结构..............................................................................563 18.5.2 导入表、导出表、动态链接.........................................................................565 18.5.3 NTDLL.DLL、NATIVE API和SSDT............................................................566 18.5.4 API HOOK......................................................................................................568 18.6 发布程序....................................................................................................................569 18.6.1 合理选择编译链接选项.................................................................................569 18.6.2 构建到指定路径.............................................................................................569 18.7 模块化,向Windows APl学习接口定义..................................................................569 18.7.1 lib文件............................................................................................................569 18.7.2 头文件.............................................................................................................570 18.7.3 为第三方应用软件提供SDK.........................................................................570

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值