3内核对象
今天坐著無聊,突然想到,如果A進程分配足夠多的內核對象后,過一段時間A還能分配內核對象嗎?,猜想應該是可以的,因為內核對象空間是由內核分配的,
所以做了個小實驗:
我們都知道,創建線程內核對象引用計數為2,線程退出減一,closehandle減一,所以不調用closehandle,那么內核對象就會存在,直接用個工具Process Explorer
直接上代碼:
static DWORD WINAPI WinMain(LPVOID lp);
?
?
好吧,我很無聊的用了WinMain函數做為線程入口函數,這表明線程函數可以任意命名,
先介紹下ProcessExplorer,
選中Show Lower Pane后,出現Type,Name(下面部分),這就是句柄信息,
選中Demo1.exe
運行上面的代碼:
我們發現名稱為Thread有一堆了,這都是線程內核對象,最后分配不了了,彈出下面的框;
,這時是不是意味著Demo1.exe進程不能再分配內核對象了?,把代碼改下:
void CDEMO1Dlg::OnBnClickedButton1() {int i=0;while (true){HANDLE m_h = CreateThread(NULL, 0, WinMain, this, 0, NULL);if (!m_h){CString sz;sz.Format(L"共成功分配了%d個內核對象",i);AfxMessageBox(sz);break;} i++;} }多次運行后,我們發現,過一段時間Demo1.exe進程還能再分配內核對象了,估計系統從其他地方又擠出分配空間了,沒完沒了了!
轉載于:https://www.cnblogs.com/hgy413/archive/2012/04/04/3693541.html
總結
- 上一篇: UVA 10534 - Wavio Se
- 下一篇: 用户代理检测