2016-11-15 8 views
0

У меня есть проблема с копированием строки из типа в другой. код, который имеет проблему, указанную ниже.RtlStringCbCopyW Может ли копировать только первый символ строки?

DbgPrint("Value of ProcessName =%wZ \n",&ProcessName); 
//The Type of ProcessName is UNICODE_STRING 

RtlStringCbCopyW(myBuffer,((MAX_PATH+90)*sizeof(WCHAR)),ProcessName.Buffer); 
//try to copy from ProcessName.Buffer to myBuffer 

DbgPrint("Value of MyBuffer =%s \n",MyBuffer); 
//The Type of MyBuffer is Array of WCHAR 

DbgPrint("Value of ProcessName.Buffer =%s \n",ProcessName.Buffer); 

Выход: -

Value of ProcesssName =\Device\HarddiskVolume1\Windows\explorer.exe 
Value of MyBuffer =\ 
Value of ProcesssName.Buffer =\ 

почему это происходит?

ответ

0

Ваша проблема здесь в недопустимом формате %s в DbgPrint - вместо этого вам нужно использовать %S. строки в вашем случае скопированы правильно, вы только неправильно отобразили его - %s предположил строку ansi при остановке после первого \0 байт (в первом символе WCHAR). однако в общем случае использование RtlStringCbCopyW является ошибкой - потому что UNICODE_STRING может не иметь нулевого конца и может содержать пустые символы. необходимо использование RtlCopyUnicodeString. и, наконец, это не связано с driverminifilter и kernel-mode только unicode-string

+0

Большое спасибо .. его теперь работает. на самом деле я занимаюсь программированием режима ядра на мини-драйвере, поэтому я добавил эти теги. –

+0

У меня есть еще один вопрос: если я хочу извлечь \ Windows \ explorer.exe из \ Device \ HarddiskVolume1 \ Windows \ explorer.exe, что я нужно сделать для этого? –

+0

@ KashifMeo- что вы подразумеваете под "extract" ?? если вы хотите получить FS-путь только из полного nt-пути - можете открыть файл, а затем запросить его 'FileNameInformation' – RbMm

 Смежные вопросы

  • Нет связанных вопросов^_^