000
21.06.2004, 09:53 Uhr
~BokonTaylay
Gast
|
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:
C++: |
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:
C++: |
bWriteRC = WriteFile(m_hCom, sSend,iFrameLength,&iBytesWritten,&ola);
|
die overlapped Struktur ola sieht folgendermaßen aus:
C++: |
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()
C++: |
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)
Bearbeitung von typecast: |
Tags-korrigiert
|
Dieser Post wurde am 21.06.2004 um 10:04 Uhr von typecast editiert. |