Главная страница
    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.46 MB
Время: 0.003 c
15-1318268712
Jeer
2011-10-10 21:45
2012.01.29
Вот я и стал тестем и приобрел второго сына.


15-1318278603
Юрий
2011-10-11 00:30
2012.01.29
С днем рождения ! 11 октября 2011 вторник


15-1318309652
И. Павел
2011-10-11 09:07
2012.01.29
Good bye sweet VCL


3-1270789890
12
2010-04-09 09:11
2012.01.29
Запрос работает из Management Studio. Из программы нет.


15-1318345230
Awesome-o 4000
2011-10-11 19:00
2012.01.29
Прошу дать совет





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский