?
Hallo!
Bräuchte Hilfe von 'nem C++ Guru, der sich mit der Windowsprogrammierung auskennt. Meine Kenntnisse sind, was dieses ganze Security und Access Rights betrifft, recht beschränkt.
Es geht um Folgendes:
Ich öffne einen seriellen Port so:
m_hCom = CreateFile(m_sComPort,
GENERIC_READ | GENERIC_WRITE,
0, // Exclusive access
0, // security
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, // Non-Overlapped I/O
NULL); // Null template
später versuche ich darauf zu schreiben:
bWriteRC = WriteFile(m_hCom, sSend,iFrameLength,&iBytesWritten,&ola);
die overlapped Struktur ola sieht folgendermaßen aus:
SECURITY_DESCRIPTOR * pSd;
SECURITY_DESCRIPTOR sd;
pSd = &sd;
InitializeSecurityDescriptor( pSd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl( pSd, TRUE, NULL, FALSE);
PSID sid = NULL;
SID_IDENTIFIER_AUTHORITY sid_auth = {SECURITY_WORLD_SID_AUTHORITY };
AllocateAndInitializeSid( &sid_auth, 1, 0, 0, 0, 0, 0, 0, 0, 0, &sid);
SetSecurityDescriptorOwner(pSd, &sid, FALSE);
SECURITY_ATTRIBUTES * pSa;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.bInheritHandle = 1;
sa.lpSecurityDescriptor = pSd;
pSa = &sa;
ola.hEvent = CreateEvent(
pSa, // security attributes ALL ACCESS
TRUE, // manual reset event
FALSE, // not signaled
NULL // no name
;
Jetzt bekomme ich aber beim WriteFile einen Error 1337 - Invalid SID
und weiß nicht warum. Wenn ich die Initialisierung des SID weglasse, bekomme ich später bei einem WaitCommEvent()
bReadRC = WaitCommEvent (m_hCom, &dwCommModemStatus, &ola);
einen Error 5 - Access Denied
Hat irgendjemand eine Ahnung, was ich da falsch mache? Wie gesagt, C++ unter Windows ist neu für mich. Danke
Markus
P.S.: WaitCommEvent ohne Overlapped geht, aber das brauch ich für die Applikation leider nicht (kein Rücksprung vor Eventvorkommen)