windwos内核对象

个人认识
进程内核对象

1、进程内核对象创建CreateProcess();

2、内核对象是用户创建,释放是系统释放,系统根据使用计数来判断是否释放该内核对象,每个内核对象都有使用计数,当使用计数为0时系统会释放该内核对象。

3、CloseHandle()这个函数并不是释放内核对象,它只是把该内核对象的引用计数减1。

4、一个进程有一个内核对象,一个线程也有一个内核对象,等每一种资源都有一个内核对象。

5、进程包含两个部分
1、内核对象,操作系统通过它管理该进程。
2、地址空间,包括可执行文件和dll数据,动态内存(包括线程堆栈)
进程不执行任何东西,它只是线程的容器。一个进程至少包含一个线程,这个线程是主线程。
如果想要对进程中传递信息,那么就需要对主线程操作,而不能对进程操做。
例如在创建进程时有这个结构
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;
可以获得进程句柄和线程句柄、进程id和线程id。
如果对进程传递消息,使用PostThreadMessageW(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM lParam);
idTread就是线程dwThreadId而不是dwProcessId进程的id。

你可能感兴趣的:(windows)