Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];

Вниз

Как передать данные из драйвера   Найти похожие ветки 

 
Born Loser   (2011-10-08 22:12) [0]

Здравствуйте

Подскажите как передать данные из драйвера, вот такую структуру

type
 TSomeInfo = record
   Count: ULONG;
   ProcessId: array [0 .. 250] of THandle;
   String: PWCHAR;
 end;


 
Eraser ©   (2011-10-08 22:21) [1]

> [0] Born Loser   (08.10.11 22:12)

ровно так же, как и другие данные.


 
Игорь Шевченко ©   (2011-10-08 22:37) [2]

Из сферического драйвера в вакууме никак не передать.
Обычно в DeviceIoControl указывается адрес буфера, куда драйвер записывает информацию, и размер этого буфера.


 
Германн ©   (2011-10-09 00:56) [3]

Удалено модератором


 
Born Loser   (2011-10-09 08:26) [4]

Передаю так, но в Delphi в String получаются крякозябы какие то

METHOD_BUFFERED
     
case IOCTL_GET_DATA:
{
 PSomeInfo  SomeInfo = NULL;            
 SomeInfo = (PSomeInfo)Irp->AssociatedIrp.SystemBuffer;          
 SomeInfo->Count = 666;
 for (i=0; i <= 250; i++)
 {
   SomeInfo->ProcessId[i] = 45;
 }
 SomeInfo->String = L"Some Text";
     
 Irp->IoStatus.Status = STATUS_SUCCESS;                                                                                
 Irp->IoStatus.Information = sizeof(SomeInfo) * sizeof(WCHAR);      
 IoCompleteRequest(Irp, IO_NO_INCREMENT);      
 return STATUS_SUCCESS;      
}


 
MBo ©   (2011-10-09 09:27) [5]

1. Убедиться, что формат строк одинаковый
2. Узнать, в одном ли адресном пространстве располагается тело строки


 
sniknik ©   (2011-10-09 09:48) [6]

3. убедится что "драйвер" написан на дельфе одной версии программой (? не уверен, но возможно), и/или одними настройками (выравнивание. это точно).
т.к. требуется "вот такую структуру", т.е. не другую, типа упакованной или в соответствии с правилами "драйверов" (dll), а именно такую, то нужно подстраивать окружение.


 
Игорь Шевченко ©   (2011-10-09 11:39) [7]

sniknik ©   (09.10.11 09:48) [6]

Куда тебя несет ? Не позорься


 
Игорь Шевченко ©   (2011-10-09 11:44) [8]


>  SomeInfo->String = L"Some Text";


Это выброси.

Обычно для передачи строк из/в драйвер предусматривают место в буфере, который передается в DeviceIoControl, включая длину, например, строки.

то есть, либо

type
TSomeInfo = record
  Count: ULONG;
  ProcessId: array [0 .. 250] of THandle;
  StringLength: Integer;
  StringData: array[0..0] of WideChar;
end;


либо

type
TSomeInfo = record
  Count: ULONG;
  ProcessId: array [0 .. 250] of THandle;
  StringData: array[0..0] of WideChar;
end;


с завершением строки 0.

Драйверу передается максимально возможный размер строки в буфере, а он уже устанавливает нужную длину, либо передается нулевой размер, а драйвер возвращает потребный размер.
Как-то так.


 
Бездомный   (2011-10-10 12:29) [9]


> SomeInfo->String = L"Some Text";

тут передастся указатель на строку, а не строка.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
2-1318848285
pest
2011-10-17 14:44
2012.01.29
конфликт двух DLL при совместном использовании


2-1319188793
igorium
2011-10-21 13:19
2012.01.29
Как рисовать на канве картинки, которая не помещается на экран?


2-1318975668
Gu
2011-10-19 02:07
2012.01.29
номер недели


1-1282232239
DrAndriy
2010-08-19 19:37
2012.01.29
Проблема с модулями с модулями DesignIntf и DesignEditors. Где на


2-1319031742
Fr
2011-10-19 17:42
2012.01.29
группировка Items в TListView Delphi 7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский