折腾了一天,请问这错在哪了,请高手指请,谢谢
仗剑骑驴 2010-11-15 06:36:52 typedef struct _UNICODE_STRING{
USHORT Length;
USHORT MaximumLength;
PWSTR BufferName;
}UNICODE_STRING,*PUNICODE_STRING;
typedef struct __OBJECT_TYPE_INFORMATION {
UNICODE_STRING TypeName;
ULONG Reserved [22]; // reserved for internal use
} OBJECT_TYPE_INFORMATION, OBJECT_TYPE_INFORMATION;
OBJECT_TYPE_INFORMATION ObjBasic;
typedef NTSTATUS (NTAPI *NtQUERYOBJECT) ( HANDLE ObjectHandle, ULONG ObjectInformation,OBJECT_TYPE_INFORMATION ObjectInformationClass, ULONG Length, PULONG ResultLength);
NtQUERYOBJECT NtQueryObject=NULL;
HANDLE ReadDup;
PULONG Leng=NULL;
HMODULE hNtdll = NULL;
hNtdll = LoadLibrary("ntdll.dll");
NtQueryObject=(NtQUERYOBJECT)GetProcAddress(hNtdll, "NtQueryObject");
DuplicateHandle(GetCurrentProcess(),GetCurrentProcess(),GetCurrentProcess(),&ReadDup,0,FALSE,DUPLICATE_SAME_ACCESS);
NtQueryObject(ReadDup,1,ObjBasic,sizeof(OBJECT_TYPE_INFORMATION),Leng);
FreeLibrary(hNtdll);
ObjBasic.TypeName.BufferName明明是宽字符型,编译器却说是unsigned short*
DuplicateHandle得出的句柄都是些当前进程没有的,不知道从哪产生的,NtQueryObject执行后ObjBasic.TypeName.BufferName取出的值是0,,这是为什么,知道的朋友帮忙回答一下,万分感谢,留十几分下载用,一共就只有20分了,穷了点,也是一份心意哈:)