大神进,内核级程序设计
请大神帮我看看这段代码为什么会有3个warning?我是初学者写的不好的地方请不要嘲笑
[code=C]/C++
#include<ntddk.h>
#pragma pack(1)
typedef struct _ServiceDescriptorEntry {
unsigned int *ServiceTableBase; //系统服务数组表
unsigned int *ServiceCounterTableBase; //数组使用计数
unsigned int NumberOfServices; //服务数量
unsigned char *ParamTableBase; //服务参数数目表
}ServiceDescriptorTableEntry, *PServiceDescriptorTableEntry;
#pragma pack()
#define SYSNAME "System"
ULONG gProcessNameOffset;
ULONG ProcessNameOffset = 0; //进程名偏移量
ULONG GetProcessNameOffset();
BOOLEAN GetProcess( PCHAR Name );
extern PServiceDescriptorTableEntry KeServiceDescriptorTable;
typedef struct _ServiceDescriptorEnty
{
unsigned int *ServiceTableBase;
unsigned int *ServiceCounterTableBase;
unsigned int NumberOfServices;
unsigned char *ParamTableBase;
}ServiceDescripforTableEnty, *PServiceDescriptorTableEnty;
NTSTATUS ZwOpenProcess(PHANDLE ProcessHandle,ACCESS_MASK DesiredAcces,POBJECT_ATTRIBUTES ObjectAttributes,PCLIENT_ID ClientId);
NTSTATUS HookZwOpenProcess(PHANDLE ProcessHandle,ACCESS_MASK DesiredAcces,POBJECT_ATTRIBUTES ObjectAttributes,PCLIENT_ID ClientId);
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
_asm
{
cli;
mov eax,cr0;
and eax,0fffeffffh;
mov cr0,eax;
}
((PServiceDescriptorTableEnty)KeServiceDescriptorTable)->ServiceTableBase[*(PULONG)((PUCHAR)ZwOpenProcess+1)]=HookZwOpenProcess;
_asm
{
cli;
mov eax,cr0;
and eax,0x10000;
mov cr0,eax;
}
//driver->DriverUnload=DriverUnload;
//return STATUS_SUCCESS;
return STATUS_SUCCESS;
}
NTSTATUS HookZwOpenProcess(PHANDLE ProcessHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PCLIENT_ID ClientId)
{
NTSTATUS rc=NULL;
ULONG dwPID;
//rc=(NTSTATUS)(REALZWOPENPROCESS)RealZwOpenProcess(ProcessHandle,DesiredAccess,ObjectAttributes,ClientId);
if(ClientId!=NULL)
{
dwPID=(ULONG)ClientId->UniqueProcess;
if(dwPID==2344)
{
DbgPrint("PID 2344 has been accessed,need forbidden");
ProcessHandle=0;
rc=STATUS_ACCESS_DENIED;
}
}
return rc;
}
[/code]