在 WinAPI:CreateFile 等函數中有個 SECURITY_ATTRIBUTES 可以用來控制文件的用戶訪問權限,但一直不知道SECURITY_ATTRIBUTES結構中的lpSecurityDescriptor如何設置,今天查了一下MSDN發現可以用函數:
BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptor( __in LPCTSTR StringSecurityDescriptor, __in DWORD StringSDRevision, __out PSECURITY_DESCRIPTOR *SecurityDescriptor, __out PULONG SecurityDescriptorSize );來設置pSa->lpSecurityDescriptor。
要使用該函數需要引入Sddl.h 頭文件,但 VC6 里面沒有這個頭文件。
還有個方法是自己 LoadLibrary => GetProcAddress 來取得:
ConvertStringSecurityDescriptorToSecurityDescriptor 在 Windows 2000 Professional 以上的 Advapi32.dll 中。
可以用以下代碼得到:
typedef BOOL (WINAPI *FN__CSSDTSD__) ( IN LPCTSTR, IN DWORD, OUT PSECURITY_DESCRIPTOR *, OUT PULONG); FN__CSSDTSD__ ConvertStringSecurityDescriptorToSecurityDescriptor = NULL; // SDDL Version information #define SDDL_REVISION_1 1 #define SDDL_REVISION SDDL_REVISION_1 void _initLIBS() { HMODULE hAdvapi32 = ::LoadLibrary("Advapi32"); if (hAdvapi32) { ConvertStringSecurityDescriptorToSecurityDescriptor = (FN__CSSDTSD__)::GetProcAddress( hAdvapi32, "ConvertStringSecurityDescriptorToSecurityDescriptorA"); } }
參考:
http://msdn.microsoft.com/en-us/library/ms717798.aspx
http://msdn.microsoft.com/en-us/library/aa379570%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/aa376401%28VS.85%29.aspx
//EOF
0 comments:
Post a Comment