Неверный параметр при использовании SetFileInformationByHand
От: crazyfern  
Дата: 22.05.09 10:01
Оценка:
Здравствуйте.
Пару дней назад я спрашивал насчет OpenFileById, получив исчерпывающий ответ решил, что счастье настало… Но было то счастье не долго.
Возникла необходимость удалить файл, который был открыт OpenFileById и вновь натолкнулся на проблему…
Выполняемые действия:
    FILE_ID_DESCRIPTOR FileID;

      //
      //значение HFI получено с помощью GetFileInformation
      //

        //
        // TmpFileHandle – HANDLE временного файла создаваемого рядом с целевым
        // (хинт на том для OpenFileById)
        //



    FileID.FileId.LowPart = HFI.nFileIndexLow; 
    FileID.FileId.HighPart = HFI.nFileIndexHigh;
    FileID.Type = FileIdType;
    FileID.dwSize = FILE_ID_DESCRIPTOR_SIZE; //24 байта, чтобы работало


    //
    //открыть файл по ID и вернуть HANDLE
    //
    hFile = OpenFileById( 
        TmpFileHandle,
        &FileID,
        GENERIC_READ | GENERIC_WRITE  | DELETE,
        FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE,
        NULL,
        0);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        hResult = HRESULT_FROM_WIN32(GetLastError());
    }

    //
    //отметим файл на удаление
    //

    FILE_DISPOSITION_INFO FDI;
    FDI.DeleteFile = TRUE;
    bRes = SetFileInformationByHandle(hFile, FileDispositionInfo, &FDI, sizeof(FDI));
    if(!bRes)
    {
        hResult = HRESULT_FROM_WIN32(GetLastError());
    }




В результате SetFileInformationByHandle возвращает код 87 (Неверный параметр). ОС — WinVista.

Причем если файл открыть штатным способом (CreateFile), то все прекрассно работает.
Может быть, кто-нибудь подскажет в чем тут ошибка?

PS Пробовал аналогичные действия делать через NtSetInformationFile, результат тот же.
handle setfileinformationbyhandle error_invalid_parameter
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.