gpt4 book ai didi

c++ - Windows WriteFileGather 函数将最后一个错误设置为 ERROR_INVALID_PARAMETER

转载 作者:行者123 更新时间:2023-11-28 00:17:20 29 4
gpt4 key购买 nike

重现我的问题的示例代码:

#include <windows.h>
#include <iostream>

int main()
{
using namespace std;
HANDLE hdl = CreateFile("test.file", GENERIC_WRITE,
FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL |
FILE_FLAG_NO_BUFFERING |
FILE_FLAG_OVERLAPPED,
NULL);
char data[4096] = {0};
DWORD written = 0;

for(size_t i = 0; i < sizeof(data); ++i)
data[i] = 'a' + (i % 26);

OVERLAPPED async_hdl = {0};
FILE_SEGMENT_ELEMENT segs[3] = {0};

segs[0].Buffer = PtrToPtr64(data);
segs[1].Buffer = PtrToPtr64(data);

if(!WriteFileGather(hdl, segs, 8192, NULL, &async_hdl)) {
cout << "Last error: " << GetLastError() << endl;
cout << "overlapped internal status: " << async_hdl.Internal << endl;
// Last error: 87
// overlapped internal status: 259
}
CloseHandle(hdl);
return 0;
}

我用 Visual Studio 2012 编译它并在 Windows 7 上测试。作为内联注释,WriteFileGather函数总是将最后一个错误设置为 ERROR_INVALID_PARAMETER (87) 和 Internal OVERLAPPED 结构的字段是 259 .

我错过了什么?

最佳答案

MSDN:aSegmentArray ...系统内存页面并且必须在系统内存页面大小边界上对齐。使用 _aligned_malloc() 而不是堆栈内存。

关于c++ - Windows WriteFileGather 函数将最后一个错误设置为 ERROR_INVALID_PARAMETER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29413750/

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