Security Descriptor



  • 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)


Anmelden zum Antworten