Prog en session admin va créer un dossier avec pleins droits pour tout le monde:
#define _WIN32_WINNT 0x0501
#include <windows.h>
#include "Sddl.h"
DWORD IsUserAdmin()
{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = AllocateAndInitializeSid(&NtAuthority,2,
SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0, &AdministratorsGroup);
if(b) {
if(!CheckTokenMembership( NULL, AdministratorsGroup, &b)) b = FALSE;
FreeSid(AdministratorsGroup);
}
return b;
}
BOOL CreateMyDACL(SECURITY_ATTRIBUTES * pSA)
{
TCHAR szSD[] = TEXT("D:")
TEXT("(A;OICI;GA;;;WD)");
if(NULL == pSA) return FALSE;
return ConvertStringSecurityDescriptorToSecurityDescriptor(szSD, SDDL_REVISION_1, &(pSA->lpSecurityDescriptor), NULL);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
SECURITY_ATTRIBUTES sa;
PSECURITY_ATTRIBUTES psa = 0;
if(!IsUserAdmin()) return 0;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;
psa = &sa;
if(!CreateMyDACL(&sa)) {
MessageBox(0, "Erreur CreateMyDACL", "Erreur", 0x10);
return 0;
}
if(!CreateDirectory("C:\\AAA", &sa)) MessageBox(0, "Erreur CREATEDIRECTORY", "Erreur", 0x10);
if(psa) {
if(NULL != LocalFree(sa.lpSecurityDescriptor)) {
MessageBox(0, "Erreur LocalFree", "Erreur", 0x10);
return 0;
}
}
return 0;
}
ciao...
[ Lien ]
BruNews, MVP VC++