#include <ntifs.h>出现PEPROCESS redefinition问题处理

转载:http://blog.youkuaiyun.com/ytfrdfiw/article/details/23334297

如果在自己的程序中,即包含ntddk.h和ntifs.h的时候,编译的时候会出现如下编译错误:

7600.16385.0\inc\ddk\ntifs.h(85) : error C2371: 'PEPROCESS' : redefinition; different basic types,7600.16385.0\inc\ddk\wdm.h(79) : see declaration of 'PEPROCESS'

解决方法是先include ntifs.h,然后再include ntddk.h,就可以解决。

转载于:https://www.cnblogs.com/chechen/p/6595654.html

/* File Kmd.h By WzrterFX */ #pragma once #ifndef KMD_H #define KMD_H #include <cstdint> #include <ntifs.h> namespace Kmd { namespace _NtifsApi { extern "C" __declspec(dllimport) NTSTATUS __stdcall IoCreateDriver( IN PUNICODE_STRING DriverName, IN PDRIVER_INITIALIZE InitializationFunction ); extern "C" __declspec(dllimport) NTSTATUS __stdcall PsLookupProcessByProcessId( IN HANDLE ProcessId, OUT PEPROCESS* Process ); extern "C" __declspec(dllimport) NTSTATUS __stdcall MmCopyVirtualMemory( IN PEPROCESS FromProcess, IN PVOID FromAddress, IN PEPROCESS ToProcess, IN PVOID ToAddress, IN SIZE_T BufferSize, IN KPROCESSOR_MODE PreviousMode, OUT PSIZE_T NumberOfBytesCopied ); } namespace _IoCtls { constexpr std::uint32_t attach = CTL_CODE(FILE_DEVICE_UNKNOWN, 0x01, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ); constexpr std::uint32_t read = CTL_CODE(FILE_DEVICE_UNKNOWN, 0x02, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ); constexpr std::uint32_t write = CTL_CODE(FILE_DEVICE_UNKNOWN, 0x03, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ); } class Kmd { private: PDEVICE_OBJECT _deviceObject; typedef struct __AttachRequest { HANDLE process; } AttachRequest, * PAttachRequest; typedef struct __CopyMemoryRequest { PVOID from; PVOID to; SIZE_T requested; } CopyMemoryRequest, * PCopyMemoryRequest; typedef struct _KmdRequest { AttachRequest attachRequest; CopyMemoryRequest copyMemoryRequest; } KmdRequest, * PKmdRequest; static NTSTATUS KmdControl(PDEVICE_OBJECT deviceObject, PIRP io); public: NTSTATUS Create(PDRIVER_OBJECT driverObject); }; } #endif /* !KMD_H */添加注释
03-22
/* File Kmd.h By WzrterFX */ #pragma once #ifndef KMD_H #define KMD_H #include <cstdint> #include <ntifs.h> namespace Kmd { namespace _NtifsApi { extern “C” __declspec(dllimport) NTSTATUS __stdcall IoCreateDriver( IN PUNICODE_STRING DriverName, IN PDRIVER_INITIALIZE InitializationFunction ); extern "C" __declspec(dllimport) NTSTATUS __stdcall PsLookupProcessByProcessId( IN HANDLE ProcessId, OUT PEPROCESS* Process ); extern "C" __declspec(dllimport) NTSTATUS __stdcall MmCopyVirtualMemory( IN PEPROCESS FromProcess, IN PVOID FromAddress, IN PEPROCESS ToProcess, IN PVOID ToAddress, IN SIZE_T BufferSize, IN KPROCESSOR_MODE PreviousMode, OUT PSIZE_T NumberOfBytesCopied ); } namespace _IoCtls { constexpr std::uint32_t attach = CTL_CODE(FILE_DEVICE_UNKNOWN, 0x01, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ); constexpr std::uint32_t read = CTL_CODE(FILE_DEVICE_UNKNOWN, 0x02, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ); constexpr std::uint32_t write = CTL_CODE(FILE_DEVICE_UNKNOWN, 0x03, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ); } class Kmd { private: PDEVICE_OBJECT _deviceObject; typedef struct __AttachRequest { HANDLE process; } AttachRequest, * PAttachRequest; typedef struct __CopyMemoryRequest { PVOID from; PVOID to; SIZE_T requested; } CopyMemoryRequest, * PCopyMemoryRequest; typedef struct _KmdRequest { AttachRequest attachRequest; CopyMemoryRequest copyMemoryRequest; } KmdRequest, * PKmdRequest; static NTSTATUS KmdControl(PDEVICE_OBJECT deviceObject, PIRP io); public: NTSTATUS Create(PDRIVER_OBJECT driverObject); }; } #endif /* !KMD_H */这个可以单独加载使用吗
最新发布
03-24
/* File: Kmd.h Author: WzrterFX (Modified by Assistant) Description: 内核驱动头文件,修复类型定义与IOCTL生成问题 */ #pragma once #ifndef KMD_H #define KMD_H #include <ntifs.h> #include <cstdint> // 预定义设备类型宏 #define KMD_DEVICE_TYPE 0x8000 // 修正点:使用预处理器宏定义设备类型 namespace Kmd { // 内核API声明 namespace _NtifsApi { extern "C" { NTSTATUS IoCreateDriver(PUNICODE_STRING, PDRIVER_INITIALIZE); NTSTATUS PsLookupProcessByProcessId(HANDLE, PEPROCESS*); NTSTATUS MmCopyVirtualMemory(PEPROCESS, PVOID, PEPROCESS, PVOID, SIZE_T, KPROCESSOR_MODE, PSIZE_T); } } // IOCTL控制码定义 namespace _IoCtls { // 使用预处理器宏生成IOCTL码 constexpr ULONG attach = CTL_CODE(KMD_DEVICE_TYPE, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS); // 修正点 constexpr ULONG read = CTL_CODE(KMD_DEVICE_TYPE, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS); constexpr ULONG write = CTL_CODE(KMD_DEVICE_TYPE, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS); } // 设备扩展结构体(存储进程上下文) typedef struct _DEVICE_EXTENSION { PEPROCESS AttachedProcess; HANDLE ProcessId; } DEVICE_EXTENSION, * PDEVICE_EXTENSION; // 驱动请求数据结构 typedef struct _KMD_REQUEST { HANDLE ProcessId; PVOID FromAddress; PVOID ToAddress; SIZE_T Size; } KMD_REQUEST, * PKMD_REQUEST; // 驱动类声明 class KmdDriver { private: PDEVICE_OBJECT DeviceObject; UNICODE_STRING SymbolicLinkName; public: NTSTATUS Create(PDRIVER_OBJECT); static void DriverUnload(PDRIVER_OBJECT); static NTSTATUS DeviceControl(PDEVICE_OBJECT, PIRP); }; } #endif // !KMD_H易语言怎么调用
03-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值