CREATE_PROCESS_DEBUG_INFO结构包含可由调试器使用的进程创建信息。
typedef struct _CREATE_PROCESS_DEBUG_INFO { // CPDI
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;
会员
HFILE
标识进程图像文件的打开句柄。如果此成员为NULL,则句柄无效。否则,调试器可以使用该成员读取和写入映像文件。
hProcess
标识进程的打开句柄。如果此成员为NULL,则句柄无效。否则,调试器可以使用该成员读取和写入进程的内存。
hThread
标识由hProcess成员标识的进程的初始线程的打开句柄。如果hThread为NULL,则句柄无效。否则,调试器具有对线程的THREAD_GET_CONTEXT,THREAD_SET_CONTEXT和THREAD_SUSPEND_RESUME访问权限,允许调试器从线程的寄存器读取和写入,并控制线程的执行。
lpBaseOfImage
指向进程正在运行的可执行映像的基址。
dwDebugInfoFileOffset
指定由HFILE成员标识的文件中的调试信息的偏移量。内核期望调试信息为Microsoft CodeView 4.0版格式。该格式当前是COFF(通用对象文件格式)的衍生物。
nDebugInfoSize
指定文件中调试信息的大小(以字节为单位)。如果该值为零,则不存在调试信息。
lpThreadLocalBase
指向一个数据块。在偏移0x2C到这个块是另一个指针,称为ThreadLocalStoragePointer,指向每个模块线程本地存储块的数组。这使得调试器可以使用编译器使用的相同算法来访问被调试进程的线程中的每个线程数据。
lpStartAddress
指向线程的起始地址。该值只能是线程的起始地址的近似值,因为具有适当访问线程的任何应用程序可以使用SetThreadContext函数来更改线程的上下文。
lpImageName
指向与【HFILE】参数相关联的文件名。此参数可能为NULL,或者它可能包含被调试进程的地址空间中的字符串指针的地址。反过来,该地址可能为NULL或指向实际的文件名。如果fUnicode为非零值,则名称字符串为Unicode;否则,它是ANSI。
此成员是严格可选的。调试器必须准备好处理lpImageName为NULL或* lpImageName(正在调试的进程的地址空间)为NULL的情况。具体来说,Windows不提供创建进程事件的映像名称,并且不会传递第一个DLL事件的映像名称。在调用DebugActiveProcess函数的调试事件的情况下,Windows也不提供此信息。
fUnicode
指示由lpImageName成员指定的文件名是Unicode还是ANSI。非零值表示Unicode;零表示ANSI。
也可以看看
CREATE_THREAD_DEBUG_INFO, DebugActiveProcess, DEBUG_EVENT, LOAD_DLL_DEBUG_INFO, SetThreadContext