gpt4 book ai didi

c++ - DeviceIoControl 之后出现访问冲突错误

转载 作者:行者123 更新时间:2023-11-30 17:03:56 27 4
gpt4 key购买 nike

我正在尝试将 INOUT_PARAM 发送到我的内核驱动程序,看来我已经成功了。当我尝试编辑它并将其发送回应用程序时,我收到以下错误: error

这是应用程序代码:

typedef struct _INOUT_PARAM {
ULONG PID;
ULONG Addr;
PCHAR Str;
ULONG RAddr;
PCHAR RStr;
} INOUT_PARAM, *PINOUTPARAM;

INOUT_PARAM TellDriver(DWORD IOCTL, INOUT_PARAM rtmp)
{
INOUT_PARAM tmp = rtmp;
HANDLE h;
DWORD bytesIO;

h = CreateFile(TEXT("\\\\.\\KJPA"), GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
if (h != INVALID_HANDLE_VALUE) {

DeviceIoControl(h, IOCTL,
&tmp, sizeof(tmp), &tmp,
sizeof(tmp), &bytesIO, NULL);
CloseHandle(h);
}
return tmp;
}

int __cdecl main(int argc, char* argv[])
{
echo("Input some text for IOCTL_Entry");
gecho();

INOUT_PARAM parms;
initParms(&parms);

INOUT_PARAM n = TellDriver(IOCTL_ENTRY, parms);
echo(n.RStr);

gecho();
return 0;
}

这是驱动程序 IOCTL 函数:

NTSTATUS Function_IRP_DEVICE_CONTROL(PDEVICE_OBJECT pDeviceObject, PIRP Irp)
{
NTSTATUS status = STATUS_SUCCESS;
ULONG bytesIO = 0;
PIO_STACK_LOCATION stack;
BOOLEAN condition = FALSE;

PINOUTPARAM wp;

UNREFERENCED_PARAMETER(pDeviceObject);

stack = IoGetCurrentIrpStackLocation(Irp);

if (stack == NULL) {
status = STATUS_INTERNAL_ERROR;
}

wp = (PINOUTPARAM)Irp->AssociatedIrp.SystemBuffer;

wp->RStr = "Test";

Irp->IoStatus.Status = status;
Irp->IoStatus.Information = sizeof(INOUT_PARAM);

IoCompleteRequest(Irp, IO_NO_INCREMENT);

return status;
}

我似乎找不到问题所在,任何帮助将不胜感激。

提前谢谢您。

注意:当我发送 INOUT_PARAM 时没有 wp->RStr = "Test";它成功回显了初始值,这意味着驱动程序编辑或读取编辑的内存无法正常工作。

注释 2:仅当我回显/计算 n.RStr PCHAR 值时才会显示错误。

重要提示:如果我有 wp->PID = 6969;在驱动程序中,然后 echo(n.PID);它确实有效...我不知道为什么 PCHAR 会引起问题,但这很可能就是这样。有什么想法可以解决这个问题吗?

最佳答案

我找到了让它发挥作用的解决方案。我使用过以下内容:

typedef struct _INOUT_PARAM {
ULONG PID;
ULONG Addr;
CHAR Str[1024];
ULONG RAddr;
CHAR RStr[1024];
} INOUT_PARAM, *PINOUTPARAM;

通过将 PCHAR 更改为 Char[],实际上完成了这项工作 - 我在字符串上使用了 strcpy()。但我不明白为什么,请解释一下?我不会将此标记为答案,就好像解释对我来说比答案更重要。

关于c++ - DeviceIoControl 之后出现访问冲突错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35971101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com