먼저 Windows 드라이버 개발을 시도하십시오. WCHAR 배열이 이 아니고이 null로 끝났다고 가정하면 WCHAR 배열 (사용자 공간에서 오는)을 UNICODE_STRING (커널 모드에서)로 변환하려면 어떻게해야합니까?WCHAR *을 유니 코드 문자열로 변환
null로 끝나는 지 확인하고 새 버퍼를 할당하지 않으면 (null에 대해 +2) RtlAnsiXXX 함수를 사용해야합니까? 적절한 방법은 무엇입니까?
감사합니다.
먼저 Windows 드라이버 개발을 시도하십시오. WCHAR 배열이 이 아니고이 null로 끝났다고 가정하면 WCHAR 배열 (사용자 공간에서 오는)을 UNICODE_STRING (커널 모드에서)로 변환하려면 어떻게해야합니까?WCHAR *을 유니 코드 문자열로 변환
null로 끝나는 지 확인하고 새 버퍼를 할당하지 않으면 (null에 대해 +2) RtlAnsiXXX 함수를 사용해야합니까? 적절한 방법은 무엇입니까?
감사합니다.
wchar 배열에서 UNICODE_STRING을 초기화하려면 RtlInitUnicodeString을 사용하십시오.
WCHAR 배열 은 Null 종료이어야합니다.
그래서 wchar-string이 null로 종료되지 않으면 새 버퍼 (null에 대해 sizeof (WCHAR))를 할당하고 배열 내용을 복사 한 다음 RtlInitUnicodeString을 호출해야합니다. 사용자 모드에서 WCHAR 문자열이 null로 끝나는 내가 사용하고있는 경우
확인하려면BOOLEAN IsStringTerminated(PWCHAR Array, USHORT ArrayLength, USHORT *StringLength)
{
BOOLEAN bStringIsTerminated = FALSE;
USHORT uiIndex = 0;
*StringLength = 0;
while(uiIndex < ArrayLength && bStringIsTerminated == FALSE)
{
if(Array[uiIndex] == L'\0')
{
*StringLength = uiIndex + 1;
bStringIsTerminated = TRUE;
}
else
{
uiIndex++;
}
}
return bStringIsTerminated;
}
WCHAR 배열 하지은 NULL로 종료해야한다. UNICODE_STRING 구조는 계산 된 문자열을 위해 설계되었으므로 NULL이 아닌 WCHAR 배열과 함께 작동합니다. 길이를 알아야합니다.
예를 들어 RtlInitEmptyUnicodeString을 사용할 수 있습니다.
감사합니다. 따라서 사용자 공간 (irp-> AssociatedIrp.SystemBuffer)에서 오는 버퍼가 널 종료가 아니라고 가정하면, 새로운 커널을 할당하기 위해 어떤 커널 모드 함수를 사용해야합니까? ExAllocatePoolWithTag? – user1782427
예 ExAllocatePool을 사용할 수 있습니다. – ladan