Benutzer mit den meisten Antworten
Wo benutzerübergreifend gemeinsame Konfigurationsdaten abspeichern

Frage
-
Hi,
wo speichere ich Daten, so dass diese nur einmal vorhanden sind
und von jedem Benutzer aus gelesen/geschrieben werden können?Ich hatte ja gedacht, kein Problem: Einfach in CSIDL_COMMON_APPDATA
speichern.
Beispielprogramm:
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
TCHAR Filename[_MAX_PATH+1];
if (GetSpecialFolder(CSIDL_COMMON_APPDATA, Filename))
{
_tcscat(Filename, _T("\\TestConfigData.inf"));
HANDLE hFile= CreateFile(Filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile!=INVALID_HANDLE_VALUE)
{
MessageBox(nullptr, _T("ok"), _T("Info"), MB_ICONSTOP | MB_OK);
CloseHandle(hFile);
} else {
MessageBox(nullptr, _T("failed"), _T("Info"), MB_ICONSTOP | MB_OK);
}
}
return (int) 0;
}Unter XP+W7 getestet.
Als "Benutzer A" laufen -> Meldung "ok"
Danach als "Benutzer B" laufen -> Meldung "failed"ps:
Ich habe so etwas wie ein Installations-Programm dass bei Bedarf sich unter
einem anderen Benutzeraccount neu startet. D.h. ich habe keine "ursprüngliche" Installation,
die mir passende Ordner schaffen kann...Tschüß, Holger.
Antworten
-
Der Ordner ist schon richtig. Es müssen noch die passenden Berechtigungen gesetzt werden.
- Florian
- Als Antwort markiert Holger Gothan Dienstag, 31. Juli 2012 07:58
Alle Antworten
-
Der Ordner ist schon richtig. Es müssen noch die passenden Berechtigungen gesetzt werden.
- Florian
- Als Antwort markiert Holger Gothan Dienstag, 31. Juli 2012 07:58
-
Hi,
da ich recht lange gebraucht habe, um herauszufinden wie man
den SECURITY_DESCRIPTOR für "jeder darf alles" herzustellen
für das CreateFile, hier ein kurzes Beispiel (natürlich ohne
Fehlerbehandlung etc.)SID_IDENTIFIER_AUTHORITY siaWorldSidAuthority = SECURITY_WORLD_SID_AUTHORITY;
PSECURITY_DESCRIPTOR pSD = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
PACL pACL = (PACL)LocalAlloc(LPTR, 1024);InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION);
InitializeAcl(pACL, 1024, ACL_REVISION);// das ist "Jeder"
AllocateAndInitializeSid(&siaWorldSidAuthority, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pSid)) return FALSE;// das ist "darf alles"
DWORD AccessMaskAllow=FILE_GENERIC_READ | GENERIC_READ | FILE_GENERIC_WRITE | GENERIC_WRITE
| FILE_GENERIC_EXECUTE | GENERIC_EXECUTE | FILE_DELETE_CHILD | DELETE
| OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE;AddAccessAllowedAceEx(pACL, ACL_REVISION, OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE, AccessMaskAllow, pSid);
SetSecurityDescriptorDacl(pSD, TRUE, pACL, FALSE);
SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), pSD, TRUE};
HANDLE hFile= CreateFile(Filename, GENERIC_READ | GENERIC_WRITE, 0, &sa, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
Tschüß, Holger.