Библиотека FileID API, fileextd.lib, fileextd.dll
В Windows Vista и Windows 2008 Server появились новые функции WinAPI — FileID API. Названия этих функций OpenFileById(), SetFileInformationByHandle() и GetFileInformationByHandleEx(). Служат они для открытия хэндла файла по его идентификатору (вместо имени), получения и установки различных свойств файлов. Функции можно использовать и в более ранних версиях Windows, но в этом случае их нельзя экспортировать из ядра, а нужно воспользоваться .lib-файлом, предоставляемым Майкрософтом.
Применение
Итак, если программа запущена в Windows Vista или Windows 2008 Server, то функции можно брать прямо из kernel32.dll, статически или динамически. Если хочется совместимости с Windows XP/2003, то нужно скачать пакет Win32 FileID APIs 1.1.EXE с официального сайта Майкрософт или напрямую с моего сайта.
FileExtD.DLL
В архиве с сайта Microsoft присутствует только заголовочный файл fileextd.h и библиотека для статической линковки fileextd.lib. Было бы удобно иметь ещё и динамическую библиотеку. Тогда в приложении можно проверять версию операционной системы и в одном случае грузить функции из системной библиотеки, в другом случае из своей. Я сделал динамическую версию библиотеки — fileextd.dll. Скачать её можно здесь. В архиве две библиотеки, одна для x86, вторая для x64.
Прототипы
Прототипы функций выглядят так:
HANDLE WINAPI OpenFileById ( __in HANDLE hVolumeHint, __in LPFILE_ID_DESCRIPTOR lpFileId, __in DWORD dwDesiredAccess, __in DWORD dwShareMode, __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, __in DWORD dwFlagsAndAttributes ); SetFileInformationByHandle( __in HANDLE hFile, __in FILE_INFO_BY_HANDLE_CLASS FileInformationClass, __in LPVOID lpFileInformation, __in DWORD dwBufferSize ); BOOL WINAPI GetFileInformationByHandleEx( __in HANDLE hFile, __in FILE_INFO_BY_HANDLE_CLASS FileInformationClass, __out LPVOID lpFileInformation, __in DWORD dwBufferSize );
Автор: амдф
Дата: 31.05.2011
Избранное
Остальное
Лента atom