Windows API编程全攻略:从入门到精通

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本书为Windows开发者提供了全面的API编程指南,深入解析了Windows API的核心功能,包括窗口处理、文件操作、进程与线程管理等。涵盖了创建和控制应用程序所需的关键技术,如窗口显示与事件处理,文件的打开、读写与管理,以及网络通信等。此外,本书还详细介绍了消息机制、数据类型、句柄管理,以及API的调试和错误处理技巧,帮助开发者提升编程效率和软件稳定性。
Windows API 程序设计参考大全

1. Windows API概述与编程基础

1.1 Windows API简介

Windows API(Application Programming Interface)是微软为Windows操作系统提供的编程接口。它允许开发者直接与操作系统进行交互,执行诸如窗口管理、文件操作、进程控制、内存管理、网络通信等低级任务。Windows API是Windows应用程序开发的核心,理解其原理和使用方法对于开发稳定、高效的软件至关重要。

1.2 Windows编程基础

在开始使用Windows API之前,开发者需要具备一些基础的编程知识,包括C/C++语言的基础知识,了解程序的编译和链接过程,以及对Windows操作系统的基本理解。此外,熟悉Visual Studio等集成开发环境(IDE)的使用也是必要的,因为它们提供了Windows API的开发支持和调试工具。

1.3 编程范式转换

Windows API是基于过程式的编程范式,这要求开发者需要从面向对象的编程思维转变为过程式的思维。在使用Windows API时,开发者需要理解句柄(Handle)、消息(Message)、回调函数(Callback Function)等概念,并掌握如何通过函数调用和数据结构来实现复杂的系统级操作。这种编程方式虽然灵活,但也需要较高的技巧性和对系统细节的深入了解。

2. 窗口处理与窗口消息响应

2.1 窗口的基本概念和创建

窗口类的注册与创建

在Windows系统中,创建窗口需要进行窗口类的注册。窗口类是Windows系统中用来描述窗口对象特征的结构体。其定义了窗口的行为和外观。注册窗口类是创建窗口的第一步,它涉及到向系统声明窗口类的名称,以及它的窗口过程函数(Window Procedure)。窗口过程函数是一个回调函数,用于处理窗口接收到的消息。

以下是窗口类注册和窗口创建的基本代码示例:

// 注册窗口类
const char CLASS_NAME[] = "Sample Window Class";
WNDCLASS wc = {0};
wc.lpfnWndProc = WindowProcedure; // 指向窗口过程函数的指针
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);

// 创建窗口
HWND hwnd = CreateWindowEx(
    0,
    CLASS_NAME,
    "Sample Window",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    NULL,
    NULL,
    hInstance,
    NULL
);

在上述代码中, RegisterClass 函数用于注册窗口类,而 CreateWindowEx 函数用于创建窗口实例。 WindowProcedure 是用户定义的窗口过程函数,它必须被指定为窗口类的一部分。

窗口过程函数的编写

窗口过程函数是窗口的核心,它负责接收并处理窗口消息。常见的消息类型包括窗口移动、大小调整、按键、鼠标事件等。在编写窗口过程函数时,需要根据不同的消息类型编写相应的处理代码。

下面是一个窗口过程函数的简单示例:

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}

在这个函数中, WM_DESTROY 消息处理了窗口关闭事件。当窗口关闭时,调用 PostQuitMessage 函数来发送退出消息,这样主消息循环就可以结束,应用程序随之退出。

2.2 窗口的消息处理机制

消息队列的原理

Windows使用消息队列来管理和分派消息。当一个事件(例如用户按键、鼠标点击或窗口重绘)发生时,系统生成一个消息,并将其放入相应的线程消息队列。消息循环从队列中取出消息,并将其发送到相应的窗口进行处理。

消息队列的处理过程大致如下:

  1. 系统检测到事件。
  2. 系统创建一个消息结构体,填充必要的信息。
  3. 系统将消息结构体放入目标窗口线程的消息队列中。
  4. 消息循环从队列中取出消息。
  5. 消息传递给目标窗口的过程函数。
  6. 窗口过程函数根据消息类型进行处理,并返回结果。
常用窗口消息的处理

在窗口处理过程中,需要处理各种各样的消息。例如, WM_PAINT 消息用于响应窗口内容的重绘, WM_KEYDOWN 消息用于处理键盘按键事件。理解这些消息并编写相应的处理逻辑是创建功能完整窗口的关键。

以下是一个处理 WM_PAINT 消息的示例:

case WM_PAINT:
{
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd, &ps);
    // 绘图代码
    EndPaint(hwnd, &ps);
}
break;

在这个处理逻辑中, BeginPaint 函数开始绘制窗口,之后可以进行绘图操作,最后使用 EndPaint 结束绘制,从而响应重绘消息。

2.3 高级窗口操作

子窗口与控件管理

在复杂窗口中,经常需要创建子窗口(控件)。子窗口是作为父窗口一部分的窗口,它可以是按钮、编辑框等控件。管理子窗口通常涉及创建子窗口,设置其样式和位置,以及处理其特定的消息。

创建子窗口的基本步骤如下:

  1. 使用 CreateWindow CreateWindowEx 函数创建子窗口。
  2. 通过 SetWindowLong SetWindowLongPtr 函数设置子窗口的样式。
  3. 使用 MoveWindow 函数设置子窗口的位置和大小。
  4. 处理子窗口发送的消息。
动态更新界面与消息循环优化

为了提高程序的响应性和性能,优化消息循环是关键。动态更新界面意味着在合适的时间点上更新窗口内容,而不是无差别地重绘整个窗口。消息循环优化则涉及到减少不必要的消息处理,提高消息处理的效率。

优化消息循环的一个示例方法是:

  1. 使用 PeekMessage 而非 GetMessage 来检查消息队列,以非阻塞方式获取消息。
  2. WM_PAINT 处理中只更新需要重绘的部分,而不是整个客户区。
  3. 使用 DispatchMessage 将消息分派给正确的窗口过程函数。

通过这些高级窗口操作,我们可以创建更加灵活、响应性更好的应用程序界面。

3. 文件操作API详解

3.1 文件系统基础

3.1.1 文件与目录操作API

在Windows操作系统中,文件和目录的操作是通过一系列API来实现的。这些API提供了对文件系统进行读写、创建、删除、移动和属性管理等操作的能力。

例如, CreateFile 函数可以打开或创建文件、管道、邮槽、通信服务、设备以及控制台。它的使用非常广泛,是文件操作API中的核心。

HANDLE CreateFile(
  LPCSTR               lpFileName,
  DWORD                dwDesiredAccess,
  DWORD                dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD                dwCreationDisposition,
  DWORD                dwFlagsAndAttributes,
  HANDLE               hTemplateFile
);
  • lpFileName :指定要打开或创建的文件的名称。
  • dwDesiredAccess :指定文件的访问模式,如只读、读写或写入。
  • dwShareMode :指定文件共享模式,如允许其他进程读或写。
  • lpSecurityAttributes :指向安全属性的指针,通常设置为NULL。
  • dwCreationDisposition :指定在文件不存在时的操作,如创建、打开、打开并截断等。
  • dwFlagsAndAttributes :指定文件的属性和标志,如隐藏、存档等。
  • hTemplateFile :指向一个模板文件的句柄,该模板文件用于复制文件属性。

CreateFile 还可以用于打开已存在的文件,以及创建新文件。当创建新文件时,它需要一个文件名和创建新文件的标志位。成功时,该函数返回一个文件的句柄,该句柄可用于后续的读写操作。

3.1.2 文件属性与权限设置

文件属性和权限的设置也是通过特定的API来完成的。 SetFileAttributes 是一个用于设置文件属性的API。属性可以包括只读、隐藏、存档等。

BOOL SetFileAttributes(
  LPCSTR lpFileName,
  DWORD  dwFileAttributes
);
  • lpFileName :指定文件名或目录名。
  • dwFileAttributes :指定新的文件属性值。

通过指定 dwFileAttributes 参数为 FILE_ATTRIBUTE_READONLY ,可以将文件设置为只读属性。同样地,移除属性时,也可以通过逻辑操作符来修改。

对于权限,Windows使用访问控制列表(ACLs)来控制对文件和目录的访问。修改ACLs通常使用 SetNamedSecurityInfo 函数。

DWORD SetNamedSecurityInfo(
  LPWSTR                pObjectName,
  SE_OBJECT_TYPE        ObjectType,
  SECURITY_INFORMATION SecurityInfo,
  PSID                  pOwner,
  PSID                  pGroup,
  PACL                  pDacl,
  PACL                  pSacl,
  PSID                  pSecurityDescriptor
);
  • pObjectName :对象的名称(文件、目录等)。
  • ObjectType :对象的类型。
  • SecurityInfo :指定哪些安全信息要被设置。
  • pOwner :指向新的所有者SID的指针。
  • pGroup :指向新的主组SID的指针。
  • pDacl :指向新的DACL的指针。
  • pSacl :指向新的SACL的指针。
  • pSecurityDescriptor :指向新的自定义安全描述符的指针。

这些函数的参数和使用都需要仔细设置,以避免错误或安全漏洞。例如,不当的权限设置可能导致未授权访问,甚至数据泄露。

3.2 高级文件操作技巧

3.2.1 异步读写与缓冲机制

异步读写操作允许程序在执行长时间的磁盘I/O时,继续执行其他任务而不是阻塞等待。 ReadFile WriteFile 函数可以用于异步操作。

BOOL ReadFile(
  HANDLE       hFile,
  LPVOID       lpBuffer,
  DWORD        nNumberOfBytesToRead,
  LPDWORD      lpNumberOfBytesRead,
  LPOVERLAPPED lpOverlapped
);
  • hFile :文件句柄。
  • lpBuffer :指向缓冲区的指针,用于存储读取的数据。
  • nNumberOfBytesToRead :要从文件中读取的字节数。
  • lpNumberOfBytesRead :指向变量的指针,该变量返回实际读取的字节数。
  • lpOverlapped :指向OVERLAPPED结构的指针,用于异步操作。

WriteFile 函数的用法与 ReadFile 类似,但用于写入数据。

缓冲机制可以提高文件操作的效率,特别是在处理大量数据时。缓冲区可以暂存读写的数据,减少磁盘操作次数,降低I/O瓶颈。

3.2.2 文件加密与安全传输

为了保护数据的安全,Windows提供了文件加密的API。使用这些API,开发者可以确保敏感数据的安全性。

SetFileEncryption 函数是一个用来设置文件加密的API。不过,它并不是直接可用的,而是通过 CryptProtectData CryptUnprotectData 函数来实现数据的加密和解密。

这些函数使用了Windows的加密API(CryptoAPI),提供了一套用于数据保护的编程接口。例如, CryptProtectData 函数可以加密数据,而 CryptUnprotectData 可以将其解密。

BOOL CryptProtectData(
  DATA_BLOB *pDataIn,
  LPCWSTR   szDataDescr,
  DATA_BLOB *pOptionalEntropy,
  void      *pvReserved,
  CRYPTPROTECT_PROMPTSTRUCT *pPromptSTRUCT,
  DWORD     dwFlags,
  DATA_BLOB *pDataOut
);
  • pDataIn :指向包含要加密数据的DATA_BLOB结构。
  • szDataDescr :描述数据的字符串(可选)。
  • pOptionalEntropy :指向包含额外加密信息的DATA_BLOB结构(可选)。
  • pvReserved :必须设置为NULL。
  • pPromptSTRUCT :指向包含提示结构的CRYPTPROTECT_PROMPTSTRUCT(可选)。
  • dwFlags :指定加密操作的行为。
  • pDataOut :指向DATA_BLOB结构,用于接收加密后的数据。

通过这种方式,开发者能够利用Windows提供的API来保护文件系统中敏感数据的安全。

3.3 文件操作的实践案例

3.3.1 大文件处理与分块读写

处理大文件时,为了高效地使用系统资源,通常采用分块读写的方法。这种方法可以防止因一次性加载过多数据而导致的内存不足问题。

分块读写的基本原理是将文件分割为多个小块,然后按顺序或随机地读写这些块。下面是一个分块读写的示例代码:

HANDLE hFile = CreateFile("largefile.dat", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
    // 错误处理
}

LARGE_INTEGER fileSize;
GetFileSizeEx(hFile, &fileSize);

const int chunkSize = 1024 * 1024; // 1MB
for (LONGLONG offset = 0; offset < fileSize.QuadPart; offset += chunkSize) {
    char buffer[chunkSize];
    DWORD bytesRead = 0;
    OVERLAPPED overlapped = {0};
    overlapped.Offset = static_cast<LONG>(offset);
    overlapped.OffsetHigh = static_cast<LONG>(offset >> 32);

    if (!ReadFile(hFile, buffer, chunkSize, &bytesRead, &overlapped) && GetLastError() != ERROR_HANDLE_EOF) {
        // 错误处理
    }

    // 处理读取的数据buffer...
}

CloseHandle(hFile);

这个示例展示了如何以1MB大小分块读取一个大文件。注意,实际应用中需要处理错误和异常情况,例如检查文件句柄是否有效,以及正确处理读取操作的返回值。

3.3.2 复杂文件系统交互实例

在复杂的文件系统交互中,可能需要创建临时文件、管理文件锁定、处理文件属性和执行多文件同步操作。下面以创建临时文件为例,展示了一个文件系统交互的实例。

TCHAR tempFileName[MAX_PATH];
GetTempFileName(TEXT("c:\\temp"), TEXT("tmp"), 0, tempFileName);

HANDLE hTempFile = CreateFile(
    tempFileName,
    GENERIC_WRITE,
    0, // 不允许共享
    NULL,
    CREATE_ALWAYS,
    FILE_ATTRIBUTE_TEMPORARY | FILE_ATTRIBUTE_HIDDEN,
    NULL);

if (hTempFile == INVALID_HANDLE_VALUE) {
    // 错误处理
}

// 向临时文件写入数据...

// 关闭临时文件句柄
CloseHandle(hTempFile);

这个代码片段展示了如何创建一个临时文件,并且设置了临时文件属性。临时文件通常用于存储临时数据,因此具有隐藏和临时属性,以确保在不需要时可以自动删除。

通过这些实践案例,我们可以看到文件操作API的实用性和灵活性。它们不仅可以帮助开发者实现基本的文件读写,还可以处理大文件和复杂的文件系统交互场景。

在处理文件操作时,需要注意异常安全性和错误处理,以及保证代码的清晰和维护性。这样,开发者就能构建出高效、稳定且安全的文件系统交互程序。

4. 进程和线程管理

4.1 进程管理基础

4.1.1 进程的创建与终止

进程作为操作系统进行资源分配和调度的基本单位,在执行过程中具有独立的生命周期。创建进程通常涉及到多个步骤,包括分配系统资源、加载程序、初始化进程控制块等。在Windows系统中,可以使用 CreateProcess 函数来创建一个新进程。

示例代码展示了如何使用 CreateProcess 函数:

#include <windows.h>

int main() {
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    // 创建新进程的命令行
    LPCSTR cmdLine = "C:\\path\\to\\your\\executable.exe";

    // 创建新进程
    if (!CreateProcess(NULL,    // 模块名称(NULL意味着使用命令行)
                       cmdLine, // 命令行
                       NULL,    // 进程句柄不可继承
                       NULL,    // 线程句柄不可继承
                       FALSE,   // 设置句柄继承选项
                       0,       // 创建标志
                       NULL,    // 使用父进程的环境块
                       NULL,    // 使用父进程的起始目录
                       &si,     // 指向STARTUPINFO结构
                       &pi)     // 指向PROCESS_INFORMATION结构
    ) {
        printf("CreateProcess failed (%d).\n", GetLastError());
        return 1;
    }

    // 等待进程终止
    WaitForSingleObject(pi.hProcess, INFINITE);

    // 关闭进程和线程句柄
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return 0;
}

在上面的代码中, CreateProcess 函数负责创建一个新的进程实例。其中, STARTUPINFO PROCESS_INFORMATION 结构用于存储新进程的启动信息和进程句柄信息。如果函数执行失败,会通过 GetLastError 获取错误码进行调试。

终止一个进程则可以通过 TerminateProcess 函数来实现。以下代码演示了如何终止一个进程:

BOOL bSuccess = TerminateProcess(pi.hProcess, exitCode);
if (!bSuccess) {
    printf("TerminateProcess failed (%d).\n", GetLastError());
}

在这里, TerminateProcess 函数需要两个参数:进程句柄和退出代码。通过传递退出代码,我们可以为进程的终止提供更多的上下文信息。

4.1.2 进程间通信(IPC)机制

进程间通信(IPC)是指在不同进程之间传输数据和信息的过程。Windows提供了多种IPC机制,包括管道(Pipes)、邮槽(Mailslots)、共享内存(Memory-mapped files)、信号量(Semaphores)、互斥量(Mutexes)、事件(Events)和剪贴板(Clipboard)等。

以匿名管道为例,可以用来实现单向或双向数据流。创建匿名管道通常涉及到两个步骤:创建管道和在父子进程中继承管道句柄。

#include <windows.h>
#include <stdio.h>

int main() {
    HANDLE hWritePipe, hReadPipe;
    SECURITY_ATTRIBUTES saAttr;

    // 设置安全属性结构体
    saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
    saAttr.bInheritHandle = TRUE;
    saAttr.lpSecurityDescriptor = NULL;

    // 创建匿名管道
    if (!CreatePipe(&hReadPipe, &hWritePipe, &saAttr, 0)) {
        printf("CreatePipe failed (%d).\n", GetLastError());
        return 1;
    }

    // 创建子进程
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    // 继承管道句柄
    si.hStdError = hWritePipe;
    si.hStdOutput = hWritePipe;
    si.dwFlags |= STARTF_USESTDHANDLES;

    // 创建进程
    if (!CreateProcess(NULL,    // 模块名称
                       "C:\\path\\to\\your\\executable.exe", // 命令行
                       NULL,    // 进程句柄不可继承
                       NULL,    // 线程句柄不可继承
                       TRUE,    // 设置句柄继承选项
                       0,       // 创建标志
                       NULL,    // 使用父进程的环境块
                       NULL,    // 使用父进程的起始目录
                       &si,     // 指向STARTUPINFO结构
                       &pi)     // 指向PROCESS_INFORMATION结构
    ) {
        printf("CreateProcess failed (%d).\n", GetLastError());
        return 1;
    }

    // 关闭不再需要的句柄
    CloseHandle(hWritePipe);

    // 等待进程终止
    WaitForSingleObject(pi.hProcess, INFINITE);

    // 关闭进程和线程句柄
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return 0;
}

在这个示例中,我们首先创建了一个匿名管道,然后在创建子进程时通过 STARTUPINFO 结构体中的 dwFlags 标志将管道的读写句柄设置为子进程的标准错误和标准输出。这样,父进程就可以通过读句柄来接收子进程的输出数据,实现了进程间单向通信。

4.2 线程操作与同步

4.2.1 线程的创建与控制

在Windows操作系统中,线程是进程内部用来执行任务的单位。线程的创建通常使用 CreateThread 函数。与进程创建类似,线程的创建也涉及一系列的资源分配和初始化操作。

下面是一个创建线程的基本示例代码:

#include <windows.h>

DWORD WINAPI ThreadFunction(LPVOID lpParam) {
    // 线程执行体函数
    return 0;
}

int main() {
    HANDLE hThread;
    DWORD threadId;

    // 创建线程
    hThread = CreateThread(
        NULL,           // 默认安全属性
        0,              // 默认堆栈大小
        ThreadFunction, // 线程函数指针
        NULL,           // 传递给线程函数的参数
        0,              // 默认创建标志,立即运行
        &threadId       // 返回线程ID
    );

    if (hThread == NULL) {
        printf("CreateThread failed (%d).\n", GetLastError());
        return 1;
    }

    // 等待线程完成
    WaitForSingleObject(hThread, INFINITE);

    // 关闭线程句柄
    CloseHandle(hThread);

    return 0;
}

在这个示例中, ThreadFunction 是线程函数,当线程被创建时,它将被执行。 CreateThread 函数创建了线程,并在完成后使用 WaitForSingleObject 等待该线程完成其工作。最后,使用 CloseHandle 关闭线程句柄,避免资源泄漏。

4.2.2 同步对象与线程安全机制

多线程环境下,同步对象(如互斥量Mutex、信号量Semaphore和事件Event)非常关键,用于保护共享资源不被同时访问。这些同步对象可以帮助开发者管理线程的执行顺序和执行时间。

以下是使用互斥量Mutex实现线程同步的示例:

#include <windows.h>

HANDLE hMutex;

DWORD WINAPI ThreadFunction(LPVOID lpParam) {
    // 获取互斥量,如果成功,返回 WAIT_OBJECT_0
    WaitForSingleObject(hMutex, INFINITE);

    // 对共享资源的操作(临界区)

    // 释放互斥量
    ReleaseMutex(hMutex);
    return 0;
}

int main() {
    // 创建互斥量
    hMutex = CreateMutex(NULL, FALSE, NULL);

    if (hMutex == NULL) {
        printf("CreateMutex failed (%d).\n", GetLastError());
        return 1;
    }

    // 创建线程
    HANDLE hThread = CreateThread(
        NULL, ThreadFunction, NULL, 0, 0, NULL
    );

    if (hThread == NULL) {
        printf("CreateThread failed (%d).\n", GetLastError());
        CloseHandle(hMutex);
        return 1;
    }

    // 等待线程完成
    WaitForSingleObject(hThread, INFINITE);

    // 关闭句柄
    CloseHandle(hThread);
    CloseHandle(hMutex);

    return 0;
}

在这个代码中, CreateMutex 用于创建一个互斥量,之后创建的线程尝试通过 WaitForSingleObject 获取互斥量的所有权。如果互斥量被其他线程占用,线程将等待。一旦获得互斥量,线程就拥有对临界区的独占访问权。完成对共享资源的访问后,线程使用 ReleaseMutex 释放互斥量,使得其他等待的线程可以继续执行。这样,即使在多线程环境中,也能够保证共享资源的一致性和线程安全。

5. 内存管理与网络通信

5.1 内存管理原理与实践

内存管理是操作系统中至关重要的一个组成部分,它直接关系到系统的稳定性与性能。在Windows环境下,内存管理涉及内存的分配、使用和释放,以及内存共享和映射文件等高级话题。

5.1.1 内存分配与释放机制

在Windows API中,内存分配主要通过 GlobalAlloc LocalAlloc 等函数进行,而内存的释放则通过相应的 GlobalFree LocalFree 等函数完成。这些API函数为程序员提供了对内存进行操作的底层接口。

HANDLE hGlobal = GlobalAlloc(GMEM_MOVEABLE, 1024);
LPVOID pGlobal = GlobalLock(hGlobal);
// 使用内存...
GlobalUnlock(hGlobal);
GlobalFree(hGlobal);

上述代码展示了使用 GlobalAlloc 函数分配内存,然后通过 GlobalLock GlobalUnlock 进行访问,最后通过 GlobalFree 释放内存的过程。

5.1.2 内存映射文件与共享内存

内存映射文件是一种允许程序将文件内容加载到内存中,并且可以像操作内存一样来操作文件内容的方法。Windows通过 CreateFileMapping MapViewOfFile 等函数支持内存映射文件。

HANDLE hFile = CreateFile("example.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
LPVOID pView = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);

// 读取内存映射区域中的内容...
UnmapViewOfFile(pView);
CloseHandle(hMap);
CloseHandle(hFile);

在这个例子中,我们首先打开一个文件用于读取,然后创建一个文件映射对象,并将文件映射到进程的地址空间中。通过 MapViewOfFile 函数返回的指针可以访问映射的内容,最后通过 UnmapViewOfFile 释放内存映射区域。

5.2 网络编程基础

网络编程为应用程序提供了一种交换数据的方式,它允许软件在不同的机器上相互通信。Windows提供的网络API,使得网络通信变得简单明了。

5.2.1 套接字编程基础

套接字(Socket)是网络通信的基础,Windows提供了Winsock接口,它允许开发者使用标准的socket编程技术来实现网络通信。

WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
SOCKET ConnectSocket = INVALID_SOCKET;

// 创建套接字
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
    // 处理错误...
}

// 连接服务器
struct sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("127.0.0.1");
clientService.sin_port = htons(27015);

iResult = connect(ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService));

if (iResult == SOCKET_ERROR) {
    // 处理错误...
}

// 发送和接收数据...
closesocket(ConnectSocket);
WSACleanup();

示例代码展示了如何使用Winsock API创建TCP套接字,连接到服务器,并进行基本的错误处理。

5.2.2 网络数据传输与协议选择

数据传输是网络通信的核心。选择正确的协议和传输方式对于通信效率和可靠性至关重要。Windows支持TCP和UDP协议,它们各自适合不同的网络通信场景。

5.3 网络通信高级应用

网络编程不仅仅是创建连接和发送数据那么简单,还需要关注安全性、高并发和协议设计等高级话题。

5.3.1 安全通信与SSL/TLS协议

随着网络安全需求的提升,数据传输的安全性显得尤为重要。使用SSL/TLS协议可以对通信进行加密,确保数据传输的安全性。

5.3.2 高级网络服务实现

构建高效且可扩展的网络服务需要考虑多线程或异步IO模型、负载均衡、缓存策略等多种技术。在Windows平台上,开发者可以利用I/O完成端口(I/O Completion Ports)实现高性能的网络服务。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本书为Windows开发者提供了全面的API编程指南,深入解析了Windows API的核心功能,包括窗口处理、文件操作、进程与线程管理等。涵盖了创建和控制应用程序所需的关键技术,如窗口显示与事件处理,文件的打开、读写与管理,以及网络通信等。此外,本书还详细介绍了消息机制、数据类型、句柄管理,以及API的调试和错误处理技巧,帮助开发者提升编程效率和软件稳定性。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

第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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值