Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Как остановить чужой драйвер?


Автор: DIMONSOFT 17.8.2007, 14:33
сабж

Автор: ne0n 17.8.2007, 15:24
остановить,если честно не знаю...разве что выгрузить но есть пару но...поищи инфу по ZwUnloadDriver

Автор: DIMONSOFT 17.8.2007, 15:53
Пасиб. Попутный вопрос: как конвертировать string->punicodestring?

Автор: ne0n 17.8.2007, 16:12
может стоит попробовать так:
Код

type
  PUnicodeString = ^TUnicodeString;
  TUnicodeString = packed record
    Length,
    MaxLength: WORD;
    Buffer: PWideChar;
  end;


function StrToUnStr(const Value: String):  PUnicodeString;
begin
   Value^.Buffer:=Value;
end;

//или так хотя врятли...

var
MyPunocodeString;
YouStrib:String;
....

MyPunocodeString:=PUnicodeString(YouString);
...


вообщем не проверял...будет работать или нет smile 

Автор: DIMONSOFT 17.8.2007, 16:24
pointer type required smile 

Автор: ne0n 17.8.2007, 22:24
блин походу я это в бреду писал smile  попробуй вот так:
Код

function StrToUnStr(const Value: String):  PUnicodeString;
var
a: PUnicodeString;
begin
   a^.Buffer:= PWideChar(Value);
   result:=a;
end;

Автор: Riply 17.8.2007, 23:06
ne0n, 
Цитата(ne0n @  17.8.2007,  22:24 Найти цитируемый пост)
блин походу я это в бреду писал   попробуй вот так:

Я могу ошибаться, но мне кажется, что ты еще не вышел из бреда smile


Цитата(ne0n @  17.8.2007,  22:24 Найти цитируемый пост)
function StrToUnStr(const Value: String):  PUnicodeString;
var
a: PUnicodeString;
begin
   a^.Buffer:= PWideChar(Value);
   result:=a;
end;


Куда у тебя а^ указывает ?

Автор: ne0n 17.8.2007, 23:23
Riply, хех попходу ты права smile 
Ща попробуем реабилитироваться...
Вот следующая идея мож попробовать так...при помощи натив функции
Код

function RtlUnicodeStringToAnsiString(
  DestinationString: PAnsiString;
  SourceString: PUnicodeString;
  AllocateDestinationString: boolean
): NTSTATUS; stdcall external 'ntdll.dll';

Автор: Riply 17.8.2007, 23:38
ne0n, 
Цитата(ne0n @  17.8.2007,  23:23 Найти цитируемый пост)
Вот следующая идея мож попробовать так...при помощи натив функции

Так бы, конечно, получилось бы, но нужна чуть чуть другая Nt-функция(с точностью до наоборот  smile .
Но мой тебе совет: попробуй ее сам написать, а не экспортировать.
Очень поможет в будущем.

Автор: ne0n 17.8.2007, 23:48
Модератор: Сообщение скрыто.

Автор: Riply 17.8.2007, 23:53
P.S. Что бы знать, что должно получится в результате, используй экспортируему ф-ию.
У UnicodeString не только Buffer надо инициализировать. 

Автор: ne0n 17.8.2007, 23:54
Цитата(Riply @  17.8.2007,  23:53 Найти цитируемый пост)
У UnicodeString не только Buffer надо инициализировать.


длину?!

Автор: Riply 18.8.2007, 00:02
Цитата(ne0n @  17.8.2007,  23:54 Найти цитируемый пост)
длину?! 

Правильно будет обе "длинны". 
Посмотри что и как заполняет RtlAnsiStringToUnicodeString - и все станет понятно.
Так же обрати внимание на параметр AllocateDestinationString. Он очень важен.

Автор: ne0n 18.8.2007, 00:05
ок все учтем(кстати DIMONSOFT это и тебя касается smile ) smile 

Автор: MetalFan 19.8.2007, 09:32
вот вам простейший пример:
Код

type
  PUnicodeString = ^TUnicodeString;
  TUnicodeString = packed record
    Length,
    MaxLength: WORD;
    Buffer: PWideChar;
  end;

procedure proc;
var
  lAnsiStr: string;
  lWideStr: WideString;
  lUnicodeString: TUnicodeString;
  lPUnicodeString: PUnicodeString;
begin
  lAnsiStr := 'test string строка';
  lWideStr := lAnsiStr;
  lUnicodeString.Length := Length( lWideStr );
  lUnicodeString.MaxLength := Length( lWideStr ) + 2;
  lUnicodeString.Buffer := @lWideStr[1];
  lPUnicodeString := @lUnicodeString;
...

в итоге в lPUnicodeString мы имеем то, что надо.
но есть одно но! после выхода из proc указатель lPUnicodeString "умрет"...

Автор: DIMONSOFT 21.8.2007, 01:13
Благодарю всех, но че-то не работает(драйвер не выгружается)....  smile  smile хотя запускается нормально
Код

uses nativeapi;

procedure TForm1.Button1Click(Sender: TObject);
var
lAnsiStr: string;
  lWideStr: WideString;
  lUnicodeString: TUnicodeString;
  lPUnicodeString: PUnicodeString;
begin
  lAnsiStr := edit1.text;
  lWideStr := lAnsiStr;
  lUnicodeString.Length := Length( lWideStr );
  lUnicodeString.MaximumLength := Length( lWideStr ) + 2;
  lUnicodeString.Buffer := @lWideStr[1];
  lPUnicodeString := @lUnicodeString;

ZwUnloadDriver(lPUnicodeString);
end;


Автор: sentry 21.8.2007, 09:02
DIMONSOFT, почитай http://msdn2.microsoft.com/en-us/library/ms800946.aspx, вдруг поможет.
И покажи, какие ошибки хоть выдает, коли не выгружает...

Автор: DIMONSOFT 21.8.2007, 09:54
Нашел решение: http://forum.sources.ru/index.php?showtopic=128188
Всем еще раз спасибо smile . ne0n +1

Автор: ne0n 21.8.2007, 15:07
DIMONSOFT, не во всех драйверах есть обработчик выгрузки...так что эта функция работает не в 100%(обычно так во всякой малваре поступают)  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)