Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.24;
Скачать: CL | DM;

Вниз

IoCreateSymbolicLink. Требования к параметрам.   Найти похожие ветки 

 
Riply ©   (2008-11-20 07:07) [0]

Здравствуйте !
Все дело происходит в DriverEntry, примерно по такой схеме:

function DriverEntry(const pDriverObject: PDRIVER_OBJECT; const pRegistryPath: PUNICODE_STRING): NTSTATUS; stdcall;
var
uDeviceName: UNICODE_STRING;
pMemBuffer: PVOID;
begin
pMemBuffer := ExAllocatePoolWithTag(PagedPool, $400, TempMemTag);
if pMemBuffer <> nil then
 try
  //........... Много всего происходит
  // Собираем имя:
  RtlMoveMemory(pMemBuffer, PREFIX_DEVICE_U.Buffer, PREFIX_DEVICE_U.Length);
  RtlMoveMemory(IncPtr(pMemBuffer, PREFIX_DEVICE_U.Length), MySuperPuperName.Buffer, MySuperPuperName.Length);
  uDeviceName.Buffer := pMemBuffer;
  //...........
  Result := IoCreateDevice(..., @uDeviceName, ...);
  {$IFDEF SH_DRV_DEBUG}DrvLog_WriteMessU("IoCreateDevice", @uDeviceName, Result, 0, 0);{$ENDIF}
  if NT_SUCCESS(Result) then
   begin
    Result := IoCreateSymbolicLink(@FunctDevSymLink, @uDeviceName);
    {$IFDEF SH_DRV_DEBUG}DrvLog_WriteMessU("IoCreateSymbolicLink", @FunctDevSymLink, Result, 0, 0);{$ENDIF}
   end;
//...........


Все нормально работает.
Попробуем изменить размер запрашиваемой памяти для pMemBuffer с $400 на $10000,
(все остальное оставим без изменений)
Теперь IoCreateSymbolicLink возвращает нам STATUS_INVALID_PARAMETER (IoCreateDevice отрабатывает нормально).
В Help`е я не нашла никаких ограничений на тип и "местоположение"
памяти для параметров IoCreateSymbolicLink.
Поясните мне пожалуйста почему так происходит и, вообще, возможно ли такое влияние ?

P.S.
Просто весь мой опыт говорит, что если сталкиваешся с чудесами - ищи ошибку в программе :)


 
Сергей М. ©   (2008-11-20 09:21) [1]

Что-то нигде не видно установки значений полей uDeviceName.Length, uDeviceName.MaximumLength


 
Riply ©   (2008-11-20 09:32) [2]

> [1] Сергей М. ©   (20.11.08 09:21)
> Что-то нигде не видно установки значений полей uDeviceName.Length, uDeviceName.MaximumLength

Потрясающе !
Дело в том, что приведенный код "переработан в читабельный" вид.
В настоящем же uDeviceName инициализировалась при помощи собственнолапной ф-ии Us_InitFromMemBlock ,
которая MaximumLength устанавливала равным размеру pMemBuffer.
Спасибо :)

P.S.
Я всегда говорила, что на ДМ самые сильные телепаты ! :)


 
Сергей М. ©   (2008-11-20 09:42) [3]


> на ДМ самые сильные телепаты


Годы изнурительно-изощреннных тренировок не проходят бесследно)



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

Текущий архив: 2010.01.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
15-1258839016
Юрий
2009-11-22 00:30
2010.01.24
С днем рождения ! 22 ноября 2009 воскресенье


15-1258681417
Дмитрий С
2009-11-20 04:43
2010.01.24
Нужна программа для хранения секретной информации.


8-1202652073
nuflin
2008-02-10 17:01
2010.01.24
вопрос по графике


1-1228253040
asail
2008-12-03 00:24
2010.01.24
Не рабтает смена лотка в QuickReport


2-1259911372
kate158
2009-12-04 10:22
2010.01.24
отображение в поле monthcalendar только месяца и года