参数查阅~~~9.18

INVALID_HANDLE_VALUE

INVALID_HANDLE_VALUE 是一个宏定义,表示一个无效的句柄值。在Windows编程中,句柄(Handle)是一种用于标识、引用和操作资源的值,如文件句柄、进程句柄、窗口句柄等。

INVALID_HANDLE_VALUE 定义为 (HANDLE)(-1),即一个无效的句柄值。它通常用于表示在操作系统函数返回时,句柄无效或发生错误的情况。比如在使用函数如 CreateFile 打开文件时,如果失败了,返回值就可能是 INVALID_HANDLE_VALUE

在使用句柄的过程中,经常会对句柄的有效性进行检查,以确保句柄的正确性。常见的判断方式就是检查句柄是否等于 INVALID_HANDLE_VALUE,如果等于,则表示句柄无效。

下面是一个示例,在使用 CreateFile 打开文件时检查句柄的有效性:

HANDLE hFile = CreateFile(TEXT("file.txt"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hFile == INVALID_HANDLE_VALUE) {
    // 文件句柄无效,处理错误或报告错误
    DWORD error = GetLastError();
    // ...
}
else {
    // 文件句柄有效,进行后续操作
    // ...
}

对于不同的资源类型,可能会有其他类似的宏定义来表示无效的句柄值,例如 INVALID_SOCKET 用于表示无效的套接字句柄。

TEXT

TEXT 是一个宏定义,用于在 Windows 编程中支持 Unicode 和 ANSI 字符串的编译选项下进行字符串文字的转换。

对于 Unicode 编译选项(如使用 UNICODE_UNICODE),TEXT 宏会将括号内的字符串常量添加 L 前缀,以表示宽字符字符串。

对于 ANSI 编译选项,TEXT 宏不会对括号内的字符串常量做任何修改,保持其为窄字符字符串。

因此,TEXT("CreateToolhelp32Snapshot (of processes)") 在 Unicode 编译选项下会被转换为宽字符字符串 L"CreateToolhelp32Snapshot (of processes)",而在 ANSI 编译选项下则保持为窄字符字符串 "CreateToolhelp32Snapshot (of processes)"

这样的转换可以使得代码在不同编码环境下都能正常工作,并具有良好的兼容性。

服务枚举的变量

    DWORD dwBufferSize = 0;
    DWORD dwNumberOfServices = 0;
    DWORD dwResumeHandle = 0;
    DWORD dwBytesNeeded = 0;

dwBufferSize:用于存储需要缓冲区的大小。在列举服务时,如果提供的缓冲区不足以容纳所有服务信息,这个变量将指示需要更大的缓冲区来接收服务信息。

dwNumberOfServices:用于存储实际列举到的服务数量。在调用列举服务的函数后,这个变量将反映列举结果中的服务数量。

dwResumeHandle:用于在多次列举服务时保存上一次列举结束的位置。通过使用这个变量,可以在多次列举中按需获取服务信息。

dwBytesNeeded:用于存储调用列举服务时需要的缓冲区大小。在调用列举服务的函数后,这个变量将表示实际返回的服务信息所需的缓冲区大小。

LPENUM_SERVICE_STATUS_PROCESSW

LPENUM_SERVICE_STATUS_PROCESSW 是一个指向 ENUM_SERVICE_STATUS_PROCESSW 结构体的指针类型。

ENUM_SERVICE_STATUS_PROCESSW 是一个结构体,用于描述系统中的服务状态信息,包括服务名称、显示名称、当前状态等。它是对 ENUM_SERVICE_STATUS_PROCESS 结构体的宽字符版本。在 Windows 系统编程中,LPENUM_SERVICE_STATUS_PROCESSW 是常用的服务枚举函数(如 EnumServicesStatusExW)的参数类型,用于接收返回的服务状态信息。

这个结构体的定义通常如下:

typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
    LPWSTR              lpServiceName;
    LPWSTR              lpDisplayName;
    SERVICE_STATUS_PROCESS  ServiceStatusProcess;
} ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW;

其中:

  • lpServiceName 是指向服务名称的指针。
  • lpDisplayName 是指向服务显示名称的指针。
  • ServiceStatusProcessSERVICE_STATUS_PROCESS 结构体,包含了关于服务的详细状态信息。

通过使用 LPENUM_SERVICE_STATUS_PROCESSW,可以方便地获取和操作服务的状态信息。

你可能感兴趣的:(上课内容,学习)