本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 4564|回复: 5

问个驱动编译问题! [复制链接]

Rank: 1

发表于 2008-11-23 15:22:57 |显示全部楼层
我用EasySYS生成的工程直接编译可以生成SYS但是替换成我自已的文件后就出错哪位老板帮个忙
////////////////////////////////////////////////////////////////////////////////////////////下面是代码
#ifndef _HOOK_FILE_H
#define _HOOK_FILE_H


#include <ntddk.h>

#define MAX_PATH 260
#define THREAD_QUERY_INFORMATION       (0x0040)  
#define PROCESS_VM_READ           (0x0010)   
#define PROCESS_QUERY_INFORMATION (0x0400)  

#define PARTITION_TYPE_NTFS            0x07
#define PARTITION_TYPE_FAT32        0x0B
#define PARTITION_TYPE_FAT32_LBA    0x0C

typedef BOOLEAN BOOL;
typedef unsigned long DWORD;
typedef DWORD * LPDWORD;
typedef DWORD * PDWORD;
typedef unsigned long ULONG;
typedef unsigned short WORD;
typedef unsigned char BYTE;
typedef unsigned int UINT;

#pragma pack( push ,1)


typedef struct _PARTITION_ENTRY
{
    UCHAR active;                 // 能否启动标志
    UCHAR StartHead;              // 该分区起始磁头号
    UCHAR StartSector;          // 起始柱面号高2位:6位起始扇区号
    UCHAR StartCylinder;       // 起始柱面号低8位
    UCHAR PartitionType;       // 分区类型
    UCHAR EndHead;             // 该分区终止磁头号
    UCHAR EndSector;              // 终止柱面号高2位:6位终止扇区号
    UCHAR EndCylinder;          // 终止柱面号低8位
    ULONG StartLBA;             // 起始扇区号
    ULONG TotalSector;          // 分区尺寸(总扇区数)
} PARTITION_ENTRY, *PPARTITION_ENTRY;
//==============================================================================
typedef struct _MBR_SECTOR
{
    UCHAR          BootCode[446];
    PARTITION_ENTRY   Partition[4];
    USHORT           Signature;
} MBR_SECTOR, *PMBR_SECTOR;
//==============================================================================
typedef struct _BBR_SECTOR
{
    USHORT JmpCode;             // 2字节跳转指令,跳转到引导代码
    UCHAR   NopCode;             // 1字节nop指令,填充用,保证跳转指令长3个字节
    UCHAR   OEMName[8];          // 8字节的OEMName
    // 下面开始为: BPB( BIOS Parameter Block )
    USHORT BytesPerSector;        // 每个扇区的字节数 (512 1024 2048 4096)
    UCHAR   SectorsPerCluster;     // 每个簇的扇区数 ( 1 2 4 8 16 32 64 128 )两者相乘不能超过32K(簇最大大小)
    USHORT ReservedSectors;    // 从卷的第一个扇区开始的保留扇区数目,该值不能为0,对于FAT12/FAT16,该值通常为1,对于FAT32,典型值为32
    UCHAR   NumberOfFATs;       // 卷上FAT数据结构的数目,该值通常应为2,[NTFS不使用NumberOfFATs字段,必须为0]
    USHORT RootEntries;           // 对于FAT12/FAT16,该值表示32字节目录项的数目,对于FAT32,该值必须为0;[NTFS不使用]
    USHORT NumberOfSectors16;     // 该卷上的扇区总数,该字段可以为0,如果该字段为0,则NumberOfSectors32不能为0;对于FAT32,该字段必须为0 [FAT32/NTFS不使用该字段]
    UCHAR   MediaDescriptor;    // 介质类型
    USHORT SectorsPerFAT16;    // 该字段标识一个FAT结构占有的扇区数(FAT12/FAT16),对于FAT32卷,该字段必须为0;[FAT32/NTFS不使用该字段]
    USHORT SectorsPerTrack;    // 用于INT 0x13中断的每个磁道的扇区数
    USHORT HeadsPerCylinder;    // 用于INT 0x13中断的每个柱面的磁头数
    ULONG   HiddenSectors;       // 包含该FAT卷的分区之前的隐藏扇区数
    ULONG   NumberOfSectors32;     // 该字段包含该卷上的所有扇区数目,对于FAT32,该字段不为0;FAT12/FAT16可根据实际大小是否超过65536个扇区数决定是否采用该字段; [NTFS不使用该字段]
    // 下面开始为: EBPB ( Extended BIOS Parameter Block )
    ULONG   SectorsPerFAT32;    // 对于FAT32,该字段包含一个FAT的大小,而SectorsPerFAT16字段必须为0;
} BBR_SECTOR, *PBBR_SECTOR;

typedef struct SystemServiceDescriptorTable
{
    UINT *ServiceTableBase;
    UINT *ServiceCounterTableBase;
    UINT NumberOfService;
    UCHAR *ParameterTableBase;
}SystemServiceDescriptorTable,*PSystemServiceDescriptorTable;

typedef struct _CURDIR
{
    UNICODE_STRING DosPath;
    PVOID Handle;
}CURDIR, *PCURDIR;

typedef struct _RTL_DRIVE_LETTER_CURDIR
{
    WORD Flags;
    WORD Length;
    ULONG TimeStamp;
    STRING DosPath;
}RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;

typedef struct _idtr
{
    //定义中断描述符表的限制,长度两字节;
    short     IDTLimit;
    //定义中断描述服表的基址,长度四字节;
    unsigned int   IDTBase;
}IDTR,*PIDTR;

typedef struct _IDTENTRY
{
    unsigned short LowOffset;
    unsigned short selector;
    unsigned char unused_lo;
    unsigned char segment_type:4;   //0x0E is an interrupt gate
    unsigned char system_segment_flag:1;
    unsigned char DPL:2;   // descriptor privilege level  
    unsigned char P:1; /* present */
    unsigned short HiOffset;
} IDTENTRY,*PIDTENTRY;



typedef struct _RTL_USER_PROCESS_PARAMETERS
{
    ULONG MaximumLength;
    ULONG Length;
    ULONG Flags;
    ULONG DebugFlags;
    PVOID ConsoleHandle;
    ULONG ConsoleFlags;
    PVOID StandardInput;
    PVOID StandardOutput;
    PVOID StandardError;
    CURDIR CurrentDirectory;
    UNICODE_STRING DllPath;
    UNICODE_STRING ImagePathName;
    UNICODE_STRING CommandLine;
    PVOID Environment;
    ULONG StartingX;
    ULONG StartingY;
    ULONG CountX;
    ULONG CountY;
    ULONG CountCharsX;
    ULONG CountCharsY;
    ULONG FillAttribute;
    ULONG WindowFlags;
    ULONG ShowWindowFlags;
    UNICODE_STRING WindowTitle;
    UNICODE_STRING DesktopInfo;
    UNICODE_STRING ShellInfo;
    UNICODE_STRING RuntimeData;
    RTL_DRIVE_LETTER_CURDIR CurrentDirectores;
}RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;

typedef struct _OS_OFFSET
{
    BOOL    bIsInit;

    // W2K SP4    WXP SP2    2K3 SP0
    ULONG    OFFSET_EPROCESS_PID;                // 0x09C    0x084    0x084
    ULONG    OFFSET_EPROCESS_ActiveProcessLinks;    // 0x0A0    0x088    0x088
    ULONG    OFFSET_EPROCESS_ParentPID;            // 0x1C8    0x14C    0x128
    ULONG    OFFSET_EPROCESS_ImageFileName;        // 0x1FC    0x174    0x154
    ULONG    OFFSET_EPROCESS_PEB;                // 0x1B0    0x1B0    0x190
    ULONG    OFFSET_EPROCESS_ProcessExiting;        // -1(无)    0x248    0x248
    ULONG    OFFSET_EPROCESS_ProcExitMask;        // -1(无)    0x004    0x004
    ULONG    OFFSET_EPROCESS_ProcDelMask;        // -1(无)    0x008    0x008
    ULONG    OFFSET_EPROCESS_ThreadListHead;        // 0x270    0x190    0x170
    ULONG    OFFSET_ETHREAD_Cid;                    // 0x1E0    0x1EC    0x1F4
    ULONG    OFFSET_ETHREAD_StartAddress;        // 0x230    0x224    0x22C
    ULONG    OFFSET_ETHREAD_W32StartAddress;        // 0x234    0x228    0x230
    ULONG    OFFSET_ETHREAD_ThreadProcess;        // 0x22C    0x220    0x228
    ULONG    OFFSET_ETHREAD_ThreadListEntry;        // 0x240    0x22C    0x234
    ULONG    OFFSET_PEB_ProcParam;                // 0x010    0x010    0x010
    ULONG    OFFSET_KTHREAD_WaitListEntry;        //
    ULONG    OFFSET_EPROCESS_ExitProcessCalled;    // only for win2k 0x1aa

    // changed by doskey
    ULONG    CALLBACK_ID_CLIENTLOADLIBRARY;        // 0x40        0x42
   
}OS_OFFSET, *POS_OFFSET;



typedef struct _SYSTEM_MODULE_INFORMATION {//Information Class 11
    ULONG Reserved [2];
    PVOID Base;
    ULONG Size;
    ULONG Flags;
    USHORT Index;
    USHORT Unknown;
    USHORT LoadCount;
    USHORT ModuleNameOffset;
    CHAR ImageName [256 ];
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;

typedef struct {
    ULONG   dwNumberOfModules;
    SYSTEM_MODULE_INFORMATION   smi;
} MODULES, *PMODULES;

#pragma pack(pop)

const static OS_OFFSET lpOFFSET_W2K_SP4_CN =
{
    TRUE,
    0x09C,        // OFFSET_EPROCESS_PID
    0x0A0,        // OFFSET_EPROCESS_ActiveProcessLinks
    0x1C8,        // OFFSET_EPROCESS_ParentPID
    0x1FC,        // OFFSET_EPROCESS_ImageFileName
    0x1B0,        // OFFSET_EPROCESS_PEB
    (ULONG)-1,    // OFFSET_EPROCESS_ProcessExiting
    (ULONG)-1,    // OFFSET_EPROCESS_ProcExitMask
    (ULONG)-1,    // OFFSET_EPROCESS_ProcDelMask
    0x270,        // OFFSET_EPROCESS_ThreadListHead
    0x1E0,        // OFFSET_ETHREAD_Cid
    0x230,        // OFFSET_ETHREAD_StartAddress
    0x234,        // OFFSET_ETHREAD_W32StartAddress
    0x22C,        // OFFSET_ETHREAD_ThreadProcess
    0x240,        // OFFSET_ETHREAD_ThreadListEntry
    0x010,        // OFFSET_PEB_ProcParam
    0x05C,        // OFFSET_KTHREAD_WaitListEntry
    0x1aa,        // OFFSET_EPROCESS_ExitProcessCalled

    0x40,        // CALLBACK_ID_CLIENTLOADLIBRARY
};


const static OS_OFFSET lpOFFSET_XP_SP1 =
{
    TRUE,
    0x084,        // OFFSET_EPROCESS_PID
    0x088,        // OFFSET_EPROCESS_ActiveProcessLinks
    0x14C,        // OFFSET_EPROCESS_ParentPID
    0x174,        // OFFSET_EPROCESS_ImageFileName
    0x1B0,        // OFFSET_EPROCESS_PEB
    0x248,        // OFFSET_EPROCESS_ProcessExiting
    0x004,        // OFFSET_EPROCESS_ProcExitMask
    0x008,        // OFFSET_EPROCESS_ProcDelMask
    0x190,        // OFFSET_EPROCESS_ThreadListHead
    0x1EC,        // OFFSET_ETHREAD_Cid
    0x224,        // OFFSET_ETHREAD_StartAddress
    0x228,        // OFFSET_ETHREAD_W32StartAddress
    0x220,        // OFFSET_ETHREAD_ThreadProcess
    0x22C,        // OFFSET_ETHREAD_ThreadListEntry
    0x010,        // OFFSET_PEB_ProcParam
    0x060,        // OFFSET_KTHREAD_WaitListEntry
    (ULONG)-1,    // OFFSET_EPROCESS_ExitProcessCalled

    0x42,        // CALLBACK_ID_CLIENTLOADLIBRARY
};


const static OS_OFFSET lpOFFSET_XP_SP2 =
{
    TRUE,
    0x084,        // OFFSET_EPROCESS_PID
    0x088,        // OFFSET_EPROCESS_ActiveProcessLinks
    0x14C,        // OFFSET_EPROCESS_ParentPID
    0x174,        // OFFSET_EPROCESS_ImageFileName
    0x1B0,        // OFFSET_EPROCESS_PEB
    0x248,        // OFFSET_EPROCESS_ProcessExiting
    0x004,        // OFFSET_EPROCESS_ProcExitMask
    0x008,        // OFFSET_EPROCESS_ProcDelMask
    0x190,        // OFFSET_EPROCESS_ThreadListHead
    0x1EC,        // OFFSET_ETHREAD_Cid
    0x224,        // OFFSET_ETHREAD_StartAddress
    0x228,        // OFFSET_ETHREAD_W32StartAddress
    0x220,        // OFFSET_ETHREAD_ThreadProcess
    0x22C,        // OFFSET_ETHREAD_ThreadListEntry
    0x010,        // OFFSET_PEB_ProcParam
    0x060,        // OFFSET_KTHREAD_WaitListEntry
    (ULONG)-1,    // OFFSET_EPROCESS_ExitProcessCalled

    0x42,        // CALLBACK_ID_CLIENTLOADLIBRARY
};

const static OS_OFFSET lpOFFSET_2K3_NOSP =
{
    TRUE,
    0x084,        // OFFSET_EPROCESS_PID
    0x088,        // OFFSET_EPROCESS_ActiveProcessLinks
    0x128,        // OFFSET_EPROCESS_ParentPID
    0x154,        // OFFSET_EPROCESS_ImageFileName
    0x190,        // OFFSET_EPROCESS_PEB
    0x248,        // OFFSET_EPROCESS_ProcessExiting
    0x004,        // OFFSET_EPROCESS_ProcExitMask
    0x008,        // OFFSET_EPROCESS_ProcDelMask
    0x170,        // OFFSET_EPROCESS_ThreadListHead
    0x1F4,        // OFFSET_ETHREAD_Cid
    0x22C,        // OFFSET_ETHREAD_StartAddress
    0x230,        // OFFSET_ETHREAD_W32StartAddress
    0x228,        // OFFSET_ETHREAD_ThreadProcess
    0x234,        // OFFSET_ETHREAD_ThreadListEntry
    0x010,        // OFFSET_PEB_ProcParam
    0x060,        // OFFSET_KTHREAD_WaitListEntry
    (ULONG)-1,    // OFFSET_EPROCESS_ExitProcessCalled

    (ULONG)-1,    // CALLBACK_ID_CLIENTLOADLIBRARY
};

const static OS_OFFSET lpOFFSET_2K3_SP1 =
{
    TRUE,
    0x094,        // OFFSET_EPROCESS_PID
    0x098,        // OFFSET_EPROCESS_ActiveProcessLinks
    0x138,        // OFFSET_EPROCESS_ParentPID
    0x164,        // OFFSET_EPROCESS_ImageFileName
    0x1A0,        // OFFSET_EPROCESS_PEB
    0x240,        // OFFSET_EPROCESS_ProcessExiting
    0x004,        // OFFSET_EPROCESS_ProcExitMask
    0x008,        // OFFSET_EPROCESS_ProcDelMask
    0x180,        // OFFSET_EPROCESS_ThreadListHead
    0x1e4,        // OFFSET_ETHREAD_Cid
    0x21C,        // OFFSET_ETHREAD_StartAddress
    0x220,        // OFFSET_ETHREAD_W32StartAddress
    0x218,        // OFFSET_ETHREAD_ThreadProcess
    0x224,        // OFFSET_ETHREAD_ThreadListEntry
    0x010,        // OFFSET_PEB_ProcParam
    0x060,        // OFFSET_KTHREAD_WaitListEntry
    (ULONG)-1,    // OFFSET_EPROCESS_ExitProcessCalled

    (ULONG)-1,    // CALLBACK_ID_CLIENTLOADLIBRARY
};


const static OS_OFFSET lpOFFSET_VISTA_SP0 =
{
    TRUE,
    0x09C,        // OFFSET_EPROCESS_PID
    0x0A0,        // OFFSET_EPROCESS_ActiveProcessLinks
    0x124,        // OFFSET_EPROCESS_ParentPID
    0x14C,        // OFFSET_EPROCESS_ImageFileName
    0x188,        // OFFSET_EPROCESS_PEB
    0x228,        // OFFSET_EPROCESS_ProcessExiting
    0x004,        // OFFSET_EPROCESS_ProcExitMask
    0x008,        // OFFSET_EPROCESS_ProcDelMask
    0x168,        // OFFSET_EPROCESS_ThreadListHead
    0x20C,        // OFFSET_ETHREAD_Cid
    0x1F8,        // OFFSET_ETHREAD_StartAddress
    0x240,        // OFFSET_ETHREAD_W32StartAddress
    0x144,        // OFFSET_ETHREAD_ThreadProcess
    0x248,        // OFFSET_ETHREAD_ThreadListEntry
    0x010,        // OFFSET_PEB_ProcParam
    0x070,        // OFFSET_KTHREAD_WaitListEntry
    (ULONG)-1,    // OFFSET_EPROCESS_ExitProcessCalled

    0x42,        // CALLBACK_ID_CLIENTLOADLIBRARY
};


typedef enum _SYSTEM_INFORMATION_CLASS {
    SystemBasicInformation,
        SystemProcessorInformation,
        SystemPerformanceInformation,
        SystemTimeOfDayInformation,
        SystemPathInformation,
        SystemProcessInformation,
        SystemCallCountInformation,
        SystemDeviceInformation,
        SystemProcessorPerformanceInformation,
        SystemFlagsInformation,
        SystemCallTimeInformation,
        SystemModuleInformation,
        SystemLocksInformation,
        SystemStackTraceInformation,
        SystemPagedPoolInformation,
        SystemNonPagedPoolInformation,
        SystemHandleInformation,
        SystemObjectInformation,
        SystemPageFileInformation,
        SystemVdmInstemulInformation,
        SystemVdmBopInformation,
        SystemFileCacheInformation,
        SystemPoolTagInformation,
        SystemInterruptInformation,
        SystemDpcBehaviorInformation,
        SystemFullMemoryInformation,
        SystemLoadGdiDriverInformation,
        SystemUnloadGdiDriverInformation,
        SystemTimeAdjustmentInformation,
        SystemSummaryMemoryInformation,
        SystemUnused1,
        SystemPerformanceTraceInformation,
        SystemCrashDumpInformation,
        SystemExceptionInformation,
        SystemCrashDumpStateInformation,
        SystemKernelDebuggerInformation,
        SystemContextSwitchInformation,
        SystemRegistryQuotaInformation,
        SystemExtendServiceTableInformation,
        SystemPrioritySeperation,
        SystemUnused3,
        SystemUnused4,
        SystemUnused5,
        SystemUnused6,
        SystemCurrentTimeZoneInformation,
        SystemLookasideInformation,
        SystemTimeSlipNotification,
        SystemSessionCreate,
        SystemSessionDetach,
        SystemSessionInformation
} SYSTEM_INFORMATION_CLASS;


extern POBJECT_TYPE IoDriverObjectType;

NTKERNELAPI
PDEVICE_OBJECT
IoGetBaseFileSystemDeviceObject(
                                __in PFILE_OBJECT FileObject    //这里出错
    );

extern
NTKERNELAPI
NTSTATUS
ObReferenceObjectByName(
                        IN PUNICODE_STRING ObjectName,
                        IN ULONG Attributes,
                        IN PACCESS_STATE PassedAccessState OPTIONAL,
                        IN ACCESS_MASK DesiredAccess OPTIONAL,
                        IN POBJECT_TYPE ObjectType,
                        IN KPROCESSOR_MODE AccessMode,
                        IN OUT PVOID ParseContext OPTIONAL,
                        OUT PVOID *Object
    );

typedef
NTSTATUS
(*XXXObReferenceObjectByName)(
                        IN PUNICODE_STRING ObjectName,
                        IN ULONG Attributes,
                        IN PACCESS_STATE PassedAccessState OPTIONAL,
                        IN ACCESS_MASK DesiredAccess OPTIONAL,
                        IN POBJECT_TYPE ObjectType,
                        IN KPROCESSOR_MODE AccessMode,
                        IN OUT PVOID ParseContext OPTIONAL,
                        OUT PVOID *Object
    );

extern
NTSYSAPI
NTSTATUS
NTAPI
ZwQuerySystemInformation (
                          IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
                          OUT PVOID SystemInformation,
                          IN ULONG SystemInformationLength,
                          OUT PULONG ReturnLength OPTIONAL
    );

__declspec(dllimport) WORD NtBuildNumber;
//__declspec(dllimport) POBJECT_TYPE* PsProcessType;

NTSYSAPI
NTSTATUS
PsLookupProcessByProcessId(
    IN    ULONG            nPID,
    OUT    PEPROCESS*        pProcess
    );

NTSTATUS DriverUnload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS DriverDispatch(IN PDEVICE_OBJECT pDeviceObj, IN PIRP pIrp );
NTSTATUS DriverDeviceControl( PDEVICE_OBJECT pDeviceObj, PIRP pIrp);
NTSTATUS MakeKRodogDir( PUNICODE_STRING punistrParentDir);


#define MEMORYTAG 'oMaS'

#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
// 模拟的new
#define new__(type, size) \
    (type*)ExAllocatePoolWithTag(NonPagedPool, sizeof(BYTE) * size, MEMORYTAG)

#define delete_(p) \
    do{if(!p) break; ExFreePool(p); p = NULL;}while(0)

#define    INSTALL_PATH_KEY    \
    L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"

#define INSTALL_PATH_VALUE    \
    L"TEMP"


BOOLEAN GetSystemOffset();

OS_OFFSET g_GlobalOffset;

BOOL CanAccessPeFile( HANDLE hFileHandle);
NTSTATUS BackupMalwareFile();
NTSTATUS GetTempPath(PUNICODE_STRING pustrInstallPath);
NTSTATUS KernelCopyFile( PUNICODE_STRING pDestFile, PUNICODE_STRING pExistFile);
POBJECT_NAME_INFORMATION GetProcessFullPath( PVOID Object);

BOOL HookIopXxxControlFile();
BOOL UnHookIopXxxControlFile();
void HookNtDeleteValue();
void UnHookNtDeleteValue();


NTKERNELAPI
NTSTATUS
ObQueryNameString(
    PVOID Object,
    POBJECT_NAME_INFORMATION ObjectNameInfo,
    ULONG Length,
    PULONG ReturnLength
    );

NTSYSAPI
NTSTATUS
NTAPI
ZwDeleteValueKey(
    HANDLE KeyHandle,
    PUNICODE_STRING ValueName
    );

NTSYSAPI
NTSTATUS
ZwQueryKey(
           IN HANDLE  KeyHandle,
           IN KEY_INFORMATION_CLASS  KeyInformationClass,
           OUT PVOID  KeyInformation,
           IN ULONG  Length,
           OUT PULONG  ResultLength
           );

NTSTATUS FakeZwDeleteValueKey(
    HANDLE KeyHandle,
    PUNICODE_STRING ValueName
    );

typedef NTSTATUS (*XXXZwDeleteValueKey)(
    HANDLE KeyHandle,
    PUNICODE_STRING ValueName
    );

typedef NTSTATUS (*XXXIopXxxControlFile)
(
    IN HANDLE FileHandle,
    IN HANDLE Event OPTIONAL,
    IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
    IN PVOID ApcContext OPTIONAL,
    OUT PIO_STATUS_BLOCK IoStatusBlock,
    IN ULONG IoControlCode,
    IN PVOID InputBuffer OPTIONAL,
    IN ULONG InputBufferLength,
    OUT PVOID OutputBuffer OPTIONAL,
    IN ULONG OutputBufferLength,
    IN BOOLEAN DeviceIoControl
);

NTSTATUS MyIopXxxControlFile
(
    IN HANDLE FileHandle,
    IN HANDLE Event OPTIONAL,
    IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
    IN PVOID ApcContext OPTIONAL,
    OUT PIO_STATUS_BLOCK IoStatusBlock,
    IN ULONG IoControlCode,
    IN PVOID InputBuffer OPTIONAL,
    IN ULONG InputBufferLength,
    OUT PVOID OutputBuffer OPTIONAL,
    IN ULONG OutputBufferLength,
    IN BOOLEAN DeviceIoControl
);

NTSTATUS LogThreat();


NTSTATUS
SendCommandCompletion(
                      IN PDEVICE_OBJECT DeviceObject,
                      IN PIRP Irp,
                      IN PVOID Context
    );


typedef struct {
   
    LARGE_INTEGER StartingVcn;
   
} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;

typedef struct RETRIEVAL_POINTERS_BUFFER {
   
    ULONG ExtentCount;
    LARGE_INTEGER StartingVcn;
    struct {
        LARGE_INTEGER NextVcn;
        LARGE_INTEGER Lcn;
    } Extents[1];
   
} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;

NTSTATUS
SendCommand(
            IN PDEVICE_OBJECT DeviceObject,
            IN ULONG MajorFunction,
            IN PVOID Buffer,
            IN ULONG SectorOffset,
            IN ULONG SendSectorCount
    );

NTSTATUS FsGetFileRetrievalPointers(PVOID Buffer, DWORD dwLength);
PDEVICE_OBJECT    GetAtapiDevice();

ULONG
GetModuleBase(
              PUCHAR ModuleFileName
              );
ULONG GetModuleBaseAndSize( PUCHAR ModuleFileName, OUT PDWORD dwSize);

DWORD GetIntEntry( DWORD Index);


__inline VOID AntiDebugBySEH(VOID)
{
    // this function must run in IRQL==PASSIVE_LEVEL
   
    DWORD    dwIndex = 0;
   
    if ( KeGetCurrentIrql() == PASSIVE_LEVEL )
    {
        __try
        {
            ProbeForRead( PsGetCurrentProcess(), 0x1020, FALSE);
        }
        __except(1)
        {
            dwIndex++;
        }
    }
}

BOOL GetNtOSKernelBase();

NTSTATUS
FASTCALL
MyIofCallDriver(
              __in PDEVICE_OBJECT DeviceObject,
              __inout PIRP Irp
    );


PDEVICE_OBJECT
MyIoGetBaseFileSystemDeviceObject(
                                  IN PFILE_OBJECT FileObject
                                );

BOOL GetAtapiDispatchFromFile( LPDWORD pDispatch, LPDWORD pInternRoutine);

#endif
///////////////////////////////////////////////////////////////////////////////////////////////////////////  以下是错误
1>Compiling - hookfile.c for i386
hookfile.h(404) : error C2146: syntax error : missing ')' before identifier 'PFILE_OBJECT'
hookfile.h(404) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
hookfile.h(404) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
hookfile.h(404) : error C2143: syntax error : missing ')' before 'identifier'
hookfile.h(404) : error C2491: 'IoGetBaseFileSystemDeviceObject' : definition of dllimport function not allowed
hookfile.h(405) : error C2059: syntax error : ')'
hookfile.h(405) : error C2085: 'FileObject' : not in formal parameter list
hookfile.h(419) : error C2085: 'ObReferenceObjectByName' : not in formal parameter list
hookfile.h(432) : error C2085: 'XXXObReferenceObjectByName' : not in formal parameter list
hookfile.h(443) : error C2085: 'ZwQuerySystemInformation' : not in formal parameter list
hookfile.h(445) : error C2085: 'NtBuildNumber' : not in formal parameter list
hookfile.h(453) : error C2085: 'PsLookupProcessByProcessId' : not in formal parameter list
hookfile.h(455) : error C2085: 'DriverUnload' : not in formal parameter list
hookfile.h(456) : error C2085: 'DriverDispatch' : not in formal parameter list
hookfile.h(457) : error C2085: 'DriverDeviceControl' : not in formal parameter list
hookfile.h(458) : error C2085: 'MakeKRodogDir' : not in formal parameter list
hookfile.h(478) : error C2085: 'GetSystemOffset' : not in formal parameter list
hookfile.h(480) : error C2085: 'g_GlobalOffset' : not in formal parameter list
hookfile.h(482) : error C2085: 'CanAccessPeFile' : not in formal parameter list
hookfile.h(483) : error C2085: 'BackupMalwareFile' : not in formal parameter list
hookfile.h(484) : error C2085: 'GetTempPath' : not in formal parameter list
hookfile.h(485) : error C2085: 'KernelCopyFile' : not in formal parameter list
hookfile.h(486) : error C2085: 'GetProcessFullPath' : not in formal parameter list
hookfile.h(488) : error C2085: 'HookIopXxxControlFile' : not in formal parameter list
hookfile.h(489) : error C2085: 'UnHookIopXxxControlFile' : not in formal parameter list
hookfile.h(490) : error C2085: 'HookNtDeleteValue' : not in formal parameter list
hookfile.h(491) : error C2085: 'UnHookNtDeleteValue' : not in formal parameter list
hookfile.h(501) : error C2085: 'ObQueryNameString' : not in formal parameter list
hookfile.h(509) : error C2082: redefinition of formal parameter 'ZwDeleteValueKey'
hookfile.h(519) : error C2082: redefinition of formal parameter 'ZwQueryKey'
hookfile.h(524) : error C2085: 'FakeZwDeleteValueKey' : not in formal parameter list
hookfile.h(529) : error C2085: 'XXXZwDeleteValueKey' : not in formal parameter list
hookfile.h(544) : error C2085: 'XXXIopXxxControlFile' : not in formal parameter list
hookfile.h(559) : error C2085: 'MyIopXxxControlFile' : not in formal parameter list
hookfile.h(561) : error C2085: 'LogThreat' : not in formal parameter list
hookfile.h(569) : error C2085: 'SendCommandCompletion' : not in formal parameter list
hookfile.h(576) : error C2085: 'STARTING_VCN_INPUT_BUFFER' : not in formal parameter list
hookfile.h(576) : error C2085: 'PSTARTING_VCN_INPUT_BUFFER' : not in formal parameter list
hookfile.h(587) : error C2085: 'RETRIEVAL_POINTERS_BUFFER' : not in formal parameter list
hookfile.h(587) : error C2085: 'PRETRIEVAL_POINTERS_BUFFER' : not in formal parameter list
hookfile.h(596) : error C2085: 'SendCommand' : not in formal parameter list
hookfile.h(598) : error C2085: 'FsGetFileRetrievalPointers' : not in formal parameter list
hookfile.h(599) : error C2085: 'GetAtapiDevice' : not in formal parameter list
hookfile.h(604) : error C2085: 'GetModuleBase' : not in formal parameter list
hookfile.h(605) : error C2085: 'GetModuleBaseAndSize' : not in formal parameter list
hookfile.h(607) : error C2085: 'GetIntEntry' : not in formal parameter list
hookfile.h(611) : error C2085: 'AntiDebugBySEH' : not in formal parameter list
hookfile.h(611) : error C2143: syntax error : missing ';' before '{'
hookfile.h(634) : error C2146: syntax error : missing ')' before identifier 'PDEVICE_OBJECT'
hookfile.h(634) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
hookfile.h(634) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
hookfile.h(634) : error C2143: syntax error : missing ')' before 'identifier'
hookfile.h(634) : error C2085: 'DeviceObject' : not in formal parameter list
hookfile.h(635) : error C2085: '__inout' : not in formal parameter list
hookfile.h(635) : error C2146: syntax error : missing ',' before identifier 'PIRP'
hookfile.h(635) : error C2146: syntax error : missing ',' before identifier 'Irp'
hookfile.h(636) : error C2059: syntax error : ')'
hookfile.h(642) : error C2085: 'MyIoGetBaseFileSystemDeviceObject' : not in formal parameter list
hookfile.h(644) : error C2085: 'GetAtapiDispatchFromFile' : not in formal parameter list
f:\winddk\2600\inc\wxp\diskguid.h(44) : error C2085: 'PARTITION_ENTRY_UNUSED_GUID' : not in formal parameter list
f:\winddk\2600\inc\wxp\diskguid.h(45) : error C2085: 'PARTITION_SYSTEM_GUID' : not in formal parameter list
f:\winddk\2600\inc\wxp\diskguid.h(46) : error C2085: 'PARTITION_MSFT_RESERVED_GUID' : not in formal parameter list
f:\winddk\2600\inc\wxp\diskguid.h(47) : error C2085: 'PARTITION_BASIC_DATA_GUID' : not in formal parameter list
f:\winddk\2600\inc\wxp\diskguid.h(48) : error C2085: 'PARTITION_LDM_METADATA_GUID' : not in formal parameter list
f:\winddk\2600\inc\wxp\diskguid.h(49) : error C2085: 'PARTITION_LDM_DATA_GUID' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(44) : error C2085: 'GUID_DEVINTERFACE_DISK' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(45) : error C2085: 'GUID_DEVINTERFACE_CDROM' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(46) : error C2085: 'GUID_DEVINTERFACE_PARTITION' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(47) : error C2085: 'GUID_DEVINTERFACE_TAPE' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(48) : error C2085: 'GUID_DEVINTERFACE_WRITEONCEDISK' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(49) : error C2085: 'GUID_DEVINTERFACE_VOLUME' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(50) : error C2085: 'GUID_DEVINTERFACE_MEDIUMCHANGER' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(51) : error C2085: 'GUID_DEVINTERFACE_FLOPPY' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(52) : error C2085: 'GUID_DEVINTERFACE_CDCHANGER' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(53) : error C2085: 'GUID_DEVINTERFACE_STORAGEPORT' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(144) : error C2085: 'STORAGE_HOTPLUG_INFO' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(144) : error C2085: 'PSTORAGE_HOTPLUG_INFO' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(177) : error C2085: 'STORAGE_DEVICE_NUMBER' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(177) : error C2085: 'PSTORAGE_DEVICE_NUMBER' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(185) : error C2085: 'STORAGE_BUS_RESET_REQUEST' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(185) : error C2085: 'PSTORAGE_BUS_RESET_REQUEST' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(199) : error C2085: 'PREVENT_MEDIA_REMOVAL' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(199) : error C2085: 'PPREVENT_MEDIA_REMOVAL' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(213) : error C2085: 'TAPE_STATISTICS' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(213) : error C2085: 'PTAPE_STATISTICS' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(224) : error C2085: 'TAPE_GET_STATISTICS' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(224) : error C2085: 'PTAPE_GET_STATISTICS' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(325) : error C2085: 'STORAGE_MEDIA_TYPE' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(325) : error C2085: 'PSTORAGE_MEDIA_TYPE' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(351) : error C2085: 'STORAGE_BUS_TYPE' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(351) : error C2085: 'PSTORAGE_BUS_TYPE' : not in formal parameter list
f:\winddk\2600\inc\wxp\ntddstor.h(357) : error C2061: syntax error : identifier 'STORAGE_MEDIA_TYPE'
f:\winddk\2600\inc\wxp\ntddstor.h(363) : error C2059: syntax error : '}'
f:\winddk\2600\inc\wxp\ntddstor.h(367) : error C2061: syntax error : identifier 'STORAGE_MEDIA_TYPE'
f:\winddk\2600\inc\wxp\ntddstor.h(368) : error C2086: 'ULONG TracksPerCylinder' : redefinition
f:\winddk\2600\inc\wxp\ntddstor.h(358) : error see declaration of 'TracksPerCylinder'
f:\winddk\2600\inc\wxp\ntddstor.h(369) : error C2086: 'ULONG SectorsPerTrack' : redefinition
f:\winddk\2600\inc\wxp\ntddstor.h(359) : error see declaration of 'SectorsPerTrack'
f:\winddk\2600\inc\wxp\ntddstor.h(370) : error C2086: 'ULONG BytesPerSector' : redefinition
f:\winddk\2600\inc\wxp\ntddstor.h(360) : error see declaration of 'BytesPerSector'
f:\winddk\2600\inc\wxp\ntddstor.h(371) : error C2086: 'ULONG NumberMediaSides' : redefinition
f:\winddk\2600\inc\wxp\ntddstor.h(361) : error see declaration of 'NumberMediaSides'
f:\winddk\2600\inc\wxp\ntddstor.h(372) : error C2086: 'ULONG MediaCharacteristics' : redefinition
f:\winddk\2600\inc\wxp\ntddstor.h(362) : error see declaration of 'MediaCharacteristics'
f:\winddk\2600\inc\wxp\ntddstor.h(373) : error C2059: syntax error : '}'
f:\winddk\2600\inc\wxp\ntddstor.h(376) : error C2061: syntax error : identifier 'STORAGE_MEDIA_TYPE'
f:\winddk\2600\inc\wxp\ntddstor.h(376) : error C1003: error count exceeds 100; stopping compilation
BUILD: Compile errors: not linking e:\hookfile\hookfile directory
BUILD: Done
    2 files compiled - 107 Errors
=============== build warnings ======================
warnings found in build
errors found in build


build complete status 4
building browse information files

HookFile.sys - 107 error(s), 0 warning(s)


注意附件已更新为无用文件

新建 文本文档.txt

1 KB, 下载次数: 439

Rank: 3Rank: 3

发表于 2008-11-23 17:56:18 |显示全部楼层
直接编译多好!
EasySYS啥东西?

Rank: 2

发表于 2008-11-24 15:44:34 |显示全部楼层
你的工程缺少头文件和一些定义文件啊。
偶也不知道你是怎么用easysys的。。反正偶用的很好
首先命令行去编译看看。。行了以后在转到easysys

某人语:一个合格的程序员不应该被编译器困扰

另外 只把问题拿出来 而不贴出出错代码 不是提问的好习惯

Rank: 1

发表于 2008-11-25 22:37:17 |显示全部楼层
代码已补上了,劳烦各位老板看下,初学编写SYS,baidu查都查不到资料,刚买了书还没到,郁闷死我了

Rank: 4

发表于 2008-11-26 03:01:59 |显示全部楼层
不完整。。。

把完整代码以附件形式上传上来帮你看下

Rank: 1

发表于 2008-11-27 03:45:59 |显示全部楼层
好的
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-6-27 07:12 , Processed in 0.025147 second(s), 11 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部