к каталогу, маску которого необходимо
int ModifyMaximumRightsMask(BYTE DirectoryHandle, char *DirectoryPath, BYTE RevokeRightsMask, BYTE GrantRightsMask);
Параметры DirectoryHandle и DirectoryPath задают путь к каталогу, маску которого необходимо изменить.
Параметр RevokeRightsMask задает удаляемые права доступа, а параметр GrantRightsMask - добавляемые.
Программа, использующая эту функцию, должна иметь права на изменение атрибутов каталога, в противном случае маска прав доступа каталога изменена не будет.
Функция возвращает нулевое значение или код ошибки:
Код ошибки |
Значение |
0x8С |
У программы нет прав для изменения атрибутов |
0x98 |
Указанный при создании каталога том не существует |
0x9C |
Неправильно задан путь к каталогу |
Для того чтобы получить права доступа к каталогу вместо функции GetEffectiveDirectoryRights() можно использовать функцию E2h прерывания INT21h:
На входе: |
AH |
= |
E2h; |
|
DS:SI |
= |
Адрес буфера запроса; |
|
ES:DI |
= |
Адрес буфера ответа. |
На выходе: |
AL |
= |
Код ошибки или 0, если операция завершилась без ошибок. |
Буфер запроса имеет следующий формат:
struct REQUEST { WORD PacketLength; // размер пакета запроса BYTE Function; // должно быть равно 3 BYTE DirectoryHandle; // индекс каталога BYTE PathLength; // длина поля пути BYTE DirectoryPath[PathLength]; // путь к каталогу };
Приведем формат буфера ответа:
struct REPLAY { WORD PacketLength; // размер пакета BYTE EffectiveRightsMask; // права доступа };
Для изменения атрибутов каталога вместо функции SetDirectoryInformation() вы также можете использовать функцию E2h прерывания INT 21h, заполнив буфер запроса следующим образом:
struct REQUEST { WORD PacketLength; // размер пакета запроса BYTE Function; // должно быть равно 25 BYTE DirectoryHandle; // индекс каталога BYTE NewCreationDateAndTime[4]; // новые дата и время long NewOwnerObjectID; // идентификатор владельца BYTE MaximumRightsMask; // маска прав доступа BYTE PathLength; // длина поля пути BYTE DirectoryPath[PathLength]; // путь к каталогу };
Если вам надо изменить маску прав доступа для существующего каталога, вы можете воспользоваться той же самой функцией прерывания INT 21h. Приведем формат соответствующего буфера запроса:
struct REQUEST { WORD PacketLength; // размер пакета запроса BYTE Function; // должно быть равно 4 BYTE DirectoryHandle; // индекс каталога BYTE RevokeRightsMask; // удаляемые права доступа BYTE GrantRightsMask; // добавляемые права доступа BYTE PathLength; // длина поля пути BYTE DirectoryPath[PathLength]; // путь к каталогу };
Во всех описанных случаях после вызова прерывания INT 21h регистр AL содержит 0 или код ошибки.
Содержание Назад Вперед