Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Создание/открытие проекции в службе


Автор: freezeman 8.5.2012, 01:31
Всем привет!

Подскажите, пожалуйста, почему в службе я создаю проекцию, но не могу открыть её в другом приложении???
Хотя если таким же образом создаю проекцию в другом приложении и открываю - работает!! ( То есть, не работает только при схеме взаимодействия СЛУЖБА->ПРИЛОЖЕНИЕ)

Код создания проекции в службе:
Код

// Настройка дескриптора защиты в службе
    PSECURITY_DESCRIPTOR pSD; 
    SECURITY_ATTRIBUTES sa; 

    // Выделяем из кучи указанное число байт
    pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH); 

    if (pSD == NULL)
    {
            return 1;
    }

    // Инициализируем дескриптор защиты
    if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION))
    {
        return 1;
    }

    // Устанавливаем дескриптор защиты
    if (!SetSecurityDescriptorDacl(pSD, TRUE, (PACL) NULL, FALSE))
    {
        return 1;
    }

    sa.nLength = sizeof(sa); 
    sa.lpSecurityDescriptor = pSD;
    sa.bInheritHandle = TRUE;

    HANDLE hMapFile;
    ReadFileParam *pBuf; // структура...
    HANDLE hEvent = ::CreateEvent (NULL, true, false, TEXT("MyEvent\0"));

    if (hEvent == NULL)
    {
        return 1;
    }

    hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE,  
        NULL,                   
        PAGE_READWRITE,        
        0,                      
        BUF_SIZE,             
        szName                    
        );                

    if (hMapFile == NULL)
    {
        return 1;
    }

    pBuf = (struct ReadFileParam *) MapViewOfFile(
        hMapFile,
        FILE_MAP_ALL_ACCESS, 
        0,
        0,
        BUF_SIZE
        );

    if (pBuf == NULL)
    {
        CloseHandle(hMapFile);
        return 1;
    }


Код открытия проекции:
Код

HANDLE hMapFile;

hMapFile = OpenFileMapping(
    FILE_MAP_ALL_ACCESS,   // read/write access
    FALSE,                 // do not inherit the name
    szName);               // name of mapping object

Автор: freezeman 8.5.2012, 02:03
При создании проекции забыл передать SECURITY_ATTRIBUTES....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)