CREATE_PROCESS_DEBUG_INFO 结构 (minwinbase.h)

包含可由调试器使用的进程创建信息。

语法

typedef struct _CREATE_PROCESS_DEBUG_INFO {
  HANDLE                 hFile;
  HANDLE                 hProcess;
  HANDLE                 hThread;
  LPVOID                 lpBaseOfImage;
  DWORD                  dwDebugInfoFileOffset;
  DWORD                  nDebugInfoSize;
  LPVOID                 lpThreadLocalBase;
  LPTHREAD_START_ROUTINE lpStartAddress;
  LPVOID                 lpImageName;
  WORD                   fUnicode;
} CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;

成员

hFile

进程图像文件的句柄。 如果此成员为 NULL,则句柄无效。 否则,调试器可以使用 成员对映像文件进行读取和写入。

调试器完成此文件后,它应使用 CloseHandle 函数关闭句柄。

hProcess

进程的句柄。 如果此成员为 NULL,则句柄无效。 否则,调试器可以使用 成员从进程内存中读取和写入。

hThread

由 hProcess 成员标识的进程的初始线程的句柄。 如果 hThread 参数为 NULL,则句柄无效。 否则,调试器具有 对线程THREAD_GET_CONTEXTTHREAD_SET_CONTEXTTHREAD_SUSPEND_RESUME 访问权限,从而允许调试器从线程的寄存器读取和写入,并控制线程的执行。

lpBaseOfImage

进程正在运行的可执行映像的基址。

dwDebugInfoFileOffset

hFile 成员标识的文件中调试信息的偏移量。

nDebugInfoSize

文件中调试信息的大小(以字节为单位)。 如果此值为零,则没有任何调试信息。

lpThreadLocalBase

指向数据块的指针。 在偏移0x2C到此块的另一个指针称为 ThreadLocalStoragePointer,它指向每个模块线程本地存储块的数组。 这样,调试器可以使用编译器使用的相同算法访问正在调试的进程线程中的每线程数据。

lpStartAddress

指向线程的起始地址的指针。 此值可能只是线程起始地址的近似值,因为对线程具有适当访问权限的任何应用程序都可以通过使用 SetThreadContext 函数更改线程的上下文。

lpImageName

指向与 hFile 成员关联的文件名的指针。 此参数可以是 NULL,也可以包含正在调试的进程地址空间中的字符串指针的地址。 反过来,该地址可能为 NULL 或指向实际文件名。 如果 fUnicode 为非零值,则名称字符串为 Unicode;否则为 ANSI。

此成员严格是可选的。 调试器必须准备好处理 lpImageNameNULL 或 *lpImageName (所调试进程的地址空间) 为 NULL 的情况。 具体而言,系统不会为创建进程事件提供映像名称,并且可能不会为第一个 DLL 事件传递映像名称。 对于源自对 DebugActiveProcess 函数的调用的调试事件,系统也不会提供此信息。

fUnicode

一个 值,该值指示 lpImageName 成员指定的文件名是 Unicode 还是 ANSI。 非零值指示 Unicode;零表示 ANSI。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 minwinbase.h (包括 Windows.h)

另请参阅

CREATE_THREAD_DEBUG_INFO

DEBUG_EVENT

DebugActiveProcess

LOAD_DLL_DEBUG_INFO

SetThreadContext