Tag Archive for 'Device Driver'

Unicode String 할당 함수…

Driver Online에 견우님의 글을 가지고 왔습니다. 
출처 : http://www.driveronline.org/bbs/view.asp?tb=cjhnim&no=80
 

WDK에서 유니코드 관련 함수중에
있을만할 것 같은데도 없는 함수들이 몇가지가 있습니다.
바로 유니코드 할당/해제 함수이죠…
그래서 아래와 같이
MyAllocateUnicodeString, MyFreeUnicodeString 등을 만들어 쓰면
편리합니다.
uniString.MaximumLength = (USHORT) MAX_PATH ;
status = MyAllocateUnicodeString( &uniString );

… 중간 생략 …

MyFreeUnicodeString(&uniSTring) ;

NTSTATUS
MyAllocateUnicodeString (
    __inout PUNICODE_STRING String
    )
{
    PAGED_CODE();

    String->Buffer = ExAllocatePoolWithTag( PagedPool,
                                            String->MaximumLength,
                                            NULL );

    if (String->Buffer == NULL) {      

        return STATUS_INSUFFICIENT_RESOURCES;
    }

    String->Length = 0;

    return STATUS_SUCCESS;
}

VOID
MyFreeUnicodeString (
    __inout PUNICODE_STRING String
    )
{
    PAGED_CODE();

    ExFreePoolWithTag( String->Buffer,
                       NULL );

    String->Length = String->MaximumLength = 0;
    String->Buffer = NULL;
}
p.s.ExAllocatePoolWithTag( PagedPool,
String->MaximumLength,
‘10YM’ );

ExFreePoolWithTag( String->Buffer,
‘10YM’ );

위처럼 태깅을 하셔서 쓰시면
메모리 풀 관련 문제가 생겼을때 디버깅하기 유용하실꺼에요~
태그는..원하시는 이름으로 바꿔서 쓰세요

FltGetFileNameInformation Fail에 관한 처리

FltGetFileNameInformation  함수는 Targe FileName을 구하는데 매우 유용하게 사용 할 수 있는 함수 입니다. 하지만 FltGetFileNameInformation 함수를 사용하다 보면 Fail을 리턴하는 경우가 생각 보다 상당히 많습니다. 
 그 ErrorCode 중 단연 많이 발생하는경우가 아마도 STATUS_FLT_INVALID_NAME_REQUEST 라는 Error Code 일것입니다. DDK Document의 내용을 보면 STATUS_FLT_INVALID_NAME_REQUEST에 과한 내용이 자세히 설명되어 있지요.
Continue reading ‘FltGetFileNameInformation Fail에 관한 처리’