【发布时间】:2014-06-09 03:16:13
【问题描述】:
结构是这样的
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
struct PLAYER
{
/* 0x0/0 */ struct PROCESS_INFORMATION *ProcessInformation;
/* 0x4/4 */ unsigned long dword4;
/* 0x8/8 */ unsigned long dword8;
/* 0xC/12 */ unsigned long dwordC;
//... Lots of fields here
}
这是TerminateProcess的原型
BOOL WINAPI TerminateProcess(
_In_ HANDLE hProcess,
_In_ UINT uExitCode
);
我尝试了以下所有 3 个方法,但都失败了。
unsigned int v102; //exit code.
struct PLAYER *player; // eax@9
TerminateProcess(player->ProcessInformation->hProcess, v102);
TerminateProcess(player->ProcessInformation.hProcess, v102);
TerminateProcess(*(player->ProcessInformation)->hProcess, v102);
箭头-> 适用于PLAYER struct pointer 的其他成员,但如果struct PLAYER 中的成员是指向另一个结构的指针,那么我会遇到编译器问题。
以上 3 个都给我编译器问题。
也许我不得不在struct PLAYER 中使用*LPPROCESS_INFORMATION,或者我不得不使用struct _PROCESS_INFORMATION *,因为我真的很讨厌使用typedef 的
(是的,我一周前才开始使用 C,我通常使用 Java/C#/VB.NET 编写代码,所以这对我来说是全新的。)
编辑:似乎我发现了我使用愚蠢的typedef 的问题,难怪我有这么多问题。这些typedef 消除了对在这种情况下是struct 的类型的使用,所以我的结构搞砸了..
修复是替换
/* 0x0/0 */ struct PROCESS_INFORMATION *ProcessInformation;
与
/* 0x0/0 */ struct _PROCESS_INFORMATION *ProcessInformation;
现在我可以不停地使用美丽的箭头
player->ProcessInformation->hProcess
是这样吗?
【问题讨论】:
-
TerminateProcess() 的函数原型有助于找到答案。 TerminateProcess() 的参数类型是什么? TerminateProcess() 是您代码的一部分,还是由库提供?
-
我现在发了,是
windows.h发来的
标签: c pointers data-structures struct structure