dt nt!_UNICODE_STRING e1339008的一个问题

Windows内核调试

dt nt!_UNICODE_STRING e1339008的一个问题


lxy_xian 2009-07-01, 10:55 上午

                fullUniName = ExAllocatePool( PagedPool, MAXPATHLEN*sizeof(WCHAR)+2*sizeof(ULONG));
                if( !fullUniName )
    {
                    //
                    // Out of memory
                    //
                    strcpy( fullname, "<INSUFFICIENT MEMORY>" );
                    ExFreePool( cmpname );
                    ExFreeToNPagedLookasideList( &FullPathLookaside, tmpname );
                    return;
                }

                fullUniName->MaximumLength = MAXPATHLEN*sizeof(WCHAR);
                if( NT_SUCCESS(ObQueryNameString( pKey, fullUniName, MAXPATHLEN, &actualLen ) )) {

1: kd> dt nt!_UNICODE_STRING e1339008
 ""   +0x000 Length           : 0
   +0x002 MaximumLength    : 0x800
   +0x004 Buffer           : (null)

上面所说有 fullUniName = ExAllocatePool( PagedPool, MAXPATHLEN*sizeof(WCHAR)+2*sizeof(ULONG));申请的内存  fullUniName(其类型为UNICODE_STRING)

我想问一下 申请后的fullUniName结构中Buffer存在的是缓冲的地址??? 还是????

Re: dt nt!_UNICODE_STRING e1339008的一个问题


王宇 2009-07-01, 11:37 上午
这种问题属于C语言的范畴了...

唉 调试一下就明白的

既然你想用“MAXPATHLEN*sizeof(WCHAR) + 2*sizeof(ULONG)”把结构 + Buffer 连在一起分配,那好歹你也先初始化一下 UNICODE_STRING.Buffer 这个域指向后面的空间啊...

Powered by Community Server Powered by CnForums.Net