1.
必須記住的是,核心對象的存在時間可以比建立該對象的進程長。
2.
核心對象能夠得到安全性描述元的保護。安全性描述元用於描述誰建立了該對象,誰能夠訪問或使用該對象,誰無權訪問該對象。安全性描述元通常在編寫 伺服器應用程式時使用,如果你編寫客戶機端的應用程式,那麼可以忽略核心對象的這個特性。
3.
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa,
DWORD dwStackSize,
PTHREAD_START_ROUTINE pfnStartAddr,
PVOID pvParam,
DWORD dwCreationFlags,
PDWORD pdwfhreadId);
HANDEE CreateFile(
PCTSTR pszFileName,
DWORD dwDesiredAccebS,
DWORD dwShareMode,
PSECURITY_ATTRIBUTES psa,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttnbutes,
HANDEE hTemplateFile);
HANDLE CreateFileMapping(
HANDLE hFile,
PSECURITY_ATTRIBUTES psa,
DWORD flProtect,
DWORD dwMdximumSizcHigh,
DWORD dwMaximumSizeLow,
PCTSTR pszName);
HANDLE CreateSemaphore(
PSECURITY_ATTRIBUTES psa,
LONG lInitialCount,
LONG lMaximumCount,
PCTSTR pszName);
HANDLE CreateWaitableTimer(
PSLCURITY_ATTRIBUTES psa,
BOOL bManualReset,
PCTSTR pszName);
HANDLE CreateJobObject(
PSECURITY_ATTRIBUTES psa,
PCTSTR pszName);
按名字共用對象的另一種方法是,進程不調用C r e a t e *函數,而是調用下面顯示的O p e n *函數中的某一個:
HANDLE OpenMutex(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
PCTSTR pszName);
HANDLE OpenEvent(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
PCTSTR pszName);
HANDLE OpenSemaphore(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
PCTSTR pszName),
HANDLE OpenWaitableTimer(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
PCTSTR pszName);
HANDLE OpenFileMapping(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
PCTSTR pszName);
HANDLE Openjob0bject(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
PCTSTR pszName);
4.
如果調用一個函數以便建立核心對象,但是調用失敗了,那麼返回的控制代碼值通常是0(N U L L )。發生這種情況是因為系統的記憶體非常短缺,或者 遇到了安全方面的問題。不過有少數函數在運行失敗時返回的控制代碼值是-1 (I N VA L I D _ H A N D L E _ VA L U E )。例如,如果C r e a t e F i l e未能開啟指定的檔案,那麼它將返回I N VA L I D _ H A N D L E _ VA L U E ,而不是返回N U L L 。當查看建立核心對象的函數傳回值 時,必須格外小心。特別要注意的是,只有當調用C r e a t e F i l e 函數時,才能將該值與I N VA L I D _ H A N D L E _ VA L U E 進行比較 。
5.
無論怎樣建立核心對象,都要向系統指明將通過調用C l o s e H a n d l e 來結束對該對象的操作:
BOOL CloseHandle(HANDLE hobj);