Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как очистить файл который используется ? 
:(
    Опции темы
Rennigth
Дата 2.6.2006, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Цитата(Nickel @  1.6.2006,  19:09 Найти цитируемый пост)
Rennigth формально array [0..0], но ZwQuerySystemInformation запишет туда NumberOfHandles элементов. Вобщем у меня никаких ошибок не выскакивает, у тебя какой делфи?  

Delphi6, Win2000Pro. 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
BinaryEvil
Дата 2.6.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 4.3.2006

Репутация: -1
Всего: 2



можно со старта системы открыть файл монопольно (ну в смысле не давать другим прогам открывать его). а если открыть его с возможностью доступа к нему других прог, эти проги могут его монопольно открывать? 
PM MAIL   Вверх
Rouse_
Дата 2.6.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



Цитата(BinaryEvil @  2.6.2006,  12:46 Найти цитируемый пост)
можно со старта системы открыть файл монопольно

Именно со старта? Если да, то это можно сделать исключительно через драйвер... 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
LeVuHoang
Дата 26.6.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.6.2006

Репутация: нет
Всего: нет



hello,
I can't type Russian here because I don't know Russian, sorry smile
I hope you can help.

I need to write a program like Unlocker.
I tried Nickel sample but It frozen at ZwQueryObject.
I tried Rouse_ sample also but the demo cannot find the ActiveX (.dll) registered with the system, eg System Context Menu.

Do you have any ideas with this ?

Thank you 
PM MAIL   Вверх
Rouse_
Дата 27.6.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



Цитата(LeVuHoang @  26.6.2006,  21:55 Найти цитируемый пост)
I tried Nickel sample but It frozen at ZwQueryObject.

Try ZwQueryInformationFile before ZwQueryObject...

e.g.
Код

if ZwQueryInformationFile(bla...bla..) = STATUS_SUCCESS then
begin
  ZwQueryObject(bla...bla..)
  ...
end;

Regards 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
LeVuHoang
Дата 27.6.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.6.2006

Репутация: нет
Всего: нет



This is my GetDirFileName function which will return the Path of Handle from a ProcessID:
Код

function TSystemHandleInfo.GetDirFileName(handle: THANDLE; PID: DWORD): PWideChar;
var
  ret: BOOL;
  hThread: THANDLE;
  h: THANDLE;
  hRemoteProcess: THANDLE;
  remote: BOOL;
  str: WideString;

  p: PGetFileNameThreadParam;
  lpBuffer: PFILE_NAME_INFORMATION;
  iob: PIO_STATUS_BLOCK;
  i: integer;

  mPtr: Pointer;
  mSize: DWORD;
  st: NTSTATUS;
  hDup: Pointer;
  hCurrentProcess: THANDLE;
  StatusBlock : record
    Status: NTSTATUS;
    Information: PDWORD;
  end;  
begin
  if (@NtQueryInformationFile = nil) then
    exit;

  ret:= false;
  hThread:= 0;
  hRemoteProcess:= 0;
  result:= nil;
  remote:= (PID <> GetCurrentProcessID);

  if remote then
  begin
    hRemoteProcess:= OpenProcess(PROCESS_DUP_HANDLE, true, PID);
    if (hRemoteProcess = 0) then
      exit;

//    hCurrentProcess:= OpenProcess(PROCESS_DUP_HANDLE, true, GetCurrentProcessID);
//    if (hCurrentProcess = 0) then
//      exit;

    //error here with GetCurrentProcess
    hDup:= VirtualAlloc(nil, SizeOf(THANDLE), MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
    if (hDup = nil) then exit;
    if not DuplicateHandle(hRemoteProcess, handle, GetCurrentProcess, hDup,
                    0, true, DUPLICATE_SAME_ACCESS) then exit;
    h:= THANDLE(hDup^);
//    ShowMessage('handle: ' + IntToStr(handle) + ' ---- ' + 'DupHandle: ' +
//                 IntToStr(h));
//    exit;
  end
  else begin
    h:= handle;
  end;

  lpBuffer:= nil;
  mSize:= $4000;
  iob:= VirtualAlloc(nil, Sizeof(IO_STATUS_BLOCK), MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
  repeat
    mPtr:= VirtualAlloc(nil, mSize, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
    if (mPtr = nil) then
      exit;

//    st:= NtQueryInformationFile(h, iob, mPtr, mSize, FileNameInformation);
    st:= NtQueryInformationFile(h, @statusblock, mPtr, mSize, FileNameInformation);
    if (st = STATUS_INFO_LENGTH_MISMATCH) then
    begin
      VirtualFree(mPtr, 0, MEM_RELEASE);
//      mSize:= mSize * 2;
    end;
  until (st <> STATUS_INFO_LENGTH_MISMATCH);

  if (st = STATUS_SUCCESS) then
  begin
    lpBuffer:= PFILE_NAME_INFORMATION(mPtr);
    result:= lpBuffer^.FileName;
  end;

  if (remote) then
  begin
    if (hRemoteProcess <> 0) then
      CloseHandle(hRemoteProcess);

    if (h <> 0) then
      try
      CloseHandle(h);
      except
      end;
  end;

  VirtualFree(iob, 0, MEM_RELEASE);
  VirtualFree(hDup, 0, MEM_RELEASE);
end;


I tested with logger, It run but suddenly suspend at:
Код

    st:= NtQueryInformationFile(h, @statusblock, mPtr, mSize, FileNameInformation);

That mean, There is an unknown error which make NtQueryInformation can't continue and pause at that line.

Do you have any idea ?

Thanks 
PM MAIL   Вверх
bems
Дата 27.6.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(Nickel @  1.6.2006,  08:54 Найти цитируемый пост)
Случайно не подскажите, по-моему под 2000 OB_TYPE_FILE = 23?  
определяй по ходу пьесы. Создавай файл и получай его тип

Цитата(Rennigth @  1.6.2006,  17:48 Найти цитируемый пост)
Nickel, кстати, твой код у меня вообще RangeCheckError выдает.
отключи проверку project/options/compiler/range checking
 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Rouse_
Дата 27.6.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



bems, ты читаешь полностью все посты или только то, что тебе интересно?
Зачем писать второй раз то, о чем уже сказано?
Цитата(LeVuHoang @  27.6.2006,  17:23 Найти цитируемый пост)
I tested with logger, It run but suddenly suspend at:

Look decision in my sample (Use a Thread).   


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
LeVuHoang
Дата 28.6.2006, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.6.2006

Репутация: нет
Всего: нет



hm... but the application run too slow compare with the Unlocker. Have you got any ideas ? 
PM MAIL   Вверх
Rouse_
Дата 28.6.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



Unloker, unlike my sample, uses the Driver smile 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
LeVuHoang
Дата 28.6.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.6.2006

Репутация: нет
Всего: нет



yah, I see. But I just need to know how can we make a program works perfect like Unlocker smile

Thank you 
PM MAIL   Вверх
Rouse_
Дата 29.6.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



Try to use SetPriorityClass and SetThreadPriority ;) 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0862 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.