> 1 <

Автор Сообщение

gihar

Moderators


Статус

249 сообщений

Где: --- да вот он я? приехал уже из Катманду
Род занятий: конкретный
Возраст: 0

#560   2009-07-29 02:21 GMT+3 часа(ов)      
короче такие дела ,
решил я лиспом драйвер загрузить. Дело не хитрое.
Если не считать что там добавки в реестр надо вносить предварительно ,
то дело сводится к 3м функциям из NTdll.dll
;;;----------- объявил я их тута ---------------------------

(in-package :win32)

#! (:library "Ntdll" :export t ascal "WINAPI")

DWORD WINAPI RtlInitUnicodeString(UNICODE_STRING * , WCHAR * );
DWORD WINAPI ZwLoadDriver(PUNICODE_STRING);
DWORD WINAPI ZwUnloadDriver (PUNICODE_STRING);



typedef struct _UNICODE_STRING
{
USHORT MaximumLength ;
USHORT Length ;
LPVOID Buffer;

} UNICODE_STRING , *PUNICODE_STRING ;


!#
;;;-----------------------------------------------------------

и когда пришел черед за структурой UNICODE_STRING

( setq uni-String (ct:malloc (ct:sizeof 'win:UNICODE_STRING)) )

получил ее и инициализировал.

( win:RtlInitUnicodeString uni-String (ct:LISP-STRING-TO-UNICODE "NameDriver"))


в принципе не было проблем осталось только вызвать ZwLoadDriver ,
но так , как я недавно только узнал что такое ЛИСП.
То решил посмотреть как работает с сишной структурой и был растроен и удивлен.
;;;--------
( ct:cref win:UNICODE_STRING uni-String Length) ;;;-- это проходит !!

;;;--------

( ct:cref win:UNICODE_STRING uni-String MaximumLength);;;--а это нет??

;;;--------

( ct:cref win:UNICODE_STRING uni-String Buffer );;;--тоже нет??

;;;--------

Что интересно что в отладчике все нормально ходит , а в программе нет.


Но если применять это вместе с SETF примерно так:

(SETF ( ct:cref win:UNICODE_STRING uni-String MaximumLength ) 15 )

;;;-- (15)-тут любое число может быть то работает и в программе


но мне нужно не инициализировать , а считать данные из структуры.


КОНЕЧНО МОЖНО ЭТО ТАК СДЕЛАТЬ:

;;;--------
( ct:cref (win:WORD *) uni-String 1 ) ;;;-- Length

;;;--------

( ct:cref ( win:WORD *) uni-String 0);;;-- MaximumLength

;;;--------

( ct:cref (winWORD *) uni-String 1 );;;--Buffer




Но тогда нахера это будет нужно и на что похоже станет программа.
Проверил что именно (и только ) параметр с названием Length срабатывает .
Где глюк я спрашиваю себя. И уже второй стакан самагону опрокидываю внутрь.
А сколько еще предстоит?
И с горя про драйвер забыл
Это было точно последнее редактирование

gihar

Moderators


Статус

249 сообщений

Где: --- да вот он я? приехал уже из Катманду
Род занятий: конкретный
Возраст: 0

#606   2009-08-17 13:19 GMT+3 часа(ов)      
Кончилось бухло.
И сразу все заработало!
Это было точно последнее редактирование
> 1 <


Онлайн :

0 пользователь(ей), 25 гость(ей) :




Реклама на сайте: