windows基础知识
错误处理
- GetLastError返回的是最后的错误码,即更早的错误码可能被覆盖
- GetLastError可能用于描述成功的原因(CreatEvent)
字符和字符串处理
宽字节转多字节WideCharToMultiByte,反之MultiByteToWideChar。
内核对象
内核
内核对象的数据结构只能由内核对象访问,windows提供API访问.
内核对象用一个安全描述符来保护,安全描述符描述了谁可以使用,创建内核对象的函数几乎都有一个指向SECURERITY_ATTRIBUYES结构的指针.
KEY_ALL_ACESS 和KEY_QUERY_VALUE
进程内核对象句柄表
进程在初始化的时候,系统为其分配一个句柄表,此表仅供内核对象使用,不适用与用户对象或GDI对象,每个结构包含指向内核对象内存块的指针,一个访问的掩码和一些标志.
具体的过程:
一个进程初始化的时候,其句柄表为空,当进程的一个线程调用一个会创建内核对象的函数时,内核将这个对象初始化,并创建一个内存块,然后内核扫描进程的句柄表,然后对其进行相应的操作.
一些创建内核对象的函数:
CreateThread()
CreateFile()
CreateFileMapping()
CreateSemaphore()
用于创建内核对象的函数都会返回一个与进程相关的句柄,这个句柄可由同一进程的线程调用
不使用了调用CloseHandle()关闭内核对象
修改句柄的标志Sethandleinfomation()