Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2009, 15:15   #11
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Somebody:
Я так и не понял, зачем нужны привелегии. Для режима гостя в винде?
Вот такой код работает:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const mb:Cardinal=1048576;
var hf:THandle;
begin
  hf := CreateFileA('d:\file.my', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  SetFilePointer(hf, 20*mb, nil, 0);
  SetEndOfFile(hf);
  CloseHandle(hf);
end;
В чем тут подвох по поводу привилегий?

Serge_Bliznykov:
Файл я закрываю CloseFile(), вы же сами в коде писали
Хотя! В выше приведенном коде при просмотре свойств созданного файла винда думает сек 4-7, но все-таки выдает окно!
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 27.09.2009, 15:38   #12
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Так... в предыдущем посте я задал тупой вопрос по поводу привилегий Почитав ссылку, суть понял. НО! Код Somebody также создает файл, но при попытке просмотреть свойства проводник вешается. Может кто может подкинуть ссылочки на привелегии классов, вчастности на класс _TOKEN_PRIVILEGES?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 27.09.2009, 20:05   #13
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

У меня проводник не вешается. Можно на всякий случай попробовать записать 1 байт после этого в тот файл.
Привилегии нужны для использования SetFileValidData. Без неё все гигабайты нового файла будут забиваться нулями, на что уходит время, но с помощью SetFileValidData можно этого избежать. Если бы все подряд так могли делать, то всем бы открылся доступ к инфе, которая была на месте этого файла до его создания, так что так делать можно только имея соответствующие привилегии. Ещё этот файл другие проги потом могут прочитать.
В общем, если на диске нет информации, за которой охотятся хакеры или ФСБ, а надо зарезервировать много места, то SetFileValidData должен быть весьма в тему. (Проверить на более-менее больших файлах не могу, места мало осталось.)
Somebody вне форума Ответить с цитированием
Старый 23.07.2010, 18:42   #14
Slavko78
Новичок
Джуниор
 
Регистрация: 23.07.2010
Сообщений: 1
По умолчанию

Этот код:

Код:
var
  hf, ht: THandle;
  tp: TOKEN_PRIVILEGES;
begin
  OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ht);
  LookupPrivilegeValue(nil, 'SeManageVolumePrivilege', tp.Privileges[0].Luid);
  tp.PrivilegeCount := 1;
  tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(ht, false, tp, 0, nil, PCardinal(nil)^);
  CloseHandle(ht);
  hf := CreateFile('d:\file.my', GENERIC_WRITE, 0, nil, CREATE_ALWAYS,
    FILE_ATTRIBUTE_NORMAL, 0);
  SetFilePointer(hf, size, nil, FILE_BEGIN);
  SetEndOfFile(hf);
  SetFileValidData(hf, size);
  CloseHandle(hf);
end;
отлично работает на XP, Vista, а на Windows 7 SetFileValidData возвращает ошибку "Клиент не обладает требуемыми правами" и соотв. неработает. Причем привелегии выделяются нормально AdjustTokenPrivileges возвращает true. Может кто знает как с этим бороться?
Slavko78 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диалоговое окно при создании файла tae1980 Microsoft Office Excel 5 16.03.2009 21:41
События при создании/открытия файла _symon Win Api 2 13.02.2009 21:19
При расположении Label на компонентах, место под Label, не реагирует на событие onClick. NavigatorNeba Компоненты Delphi 3 15.11.2008 19:56
Как и с чего начать при создании 2д игрушки. fis Gamedev - cоздание игр: Unity, OpenGL, DirectX 17 14.05.2007 18:14