我想通过VMWare ESX读取Windows Server 2003 VM中的网络文件。这个简单的代码失败(在Visual Studio 2010中)
hFile = CreateFileA(“\\ MyServer \ myfile”,
GENERIC_READ, // open for writing
FILE_SHARE_READ, // do not share
NULL, // default security
OPEN_EXISTING, // create new file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
if(hFile == INVALID_HANDLE_VALUE)return;
char * buffer =(char *)malloc(bufferSize);
if(buffer == NULL)return;
if(FALSE == ReadFile(hFile,buffer,bufferSize,& dwBytesToRead,NULL))
{
printf("Terminal failure: Unable to read from file, code is %d.\n", GetLastError());
CloseHandle(hFile);
return;
}
当bufferSize大于40,000,000时,ReadFile失败并且GetLastError返回1450,这意味着“系统资源不足以完成所请求的服务。”
其他一些信息:
1)此代码在物理机中工作
2)我的VM有4个内核和16 GB内存,我将页面文件大小更改为8G到24G,没有效果,仍然失败。
3)\\ MyServer \ myfile实际上是在运行代码的本地机器上。但是,如果我将文件更改为d:\ myfile(与\\ MyServer \ myfile相同的文件),则ReadFile会成功
4)当bufferSize小于30,000,000
时,代码有效看起来VMWare ESC对Windows有一些限制。有人可以给我关于如何调试/修复它的建议吗? (没有下面的bufferSize)
非常感谢!
答案 0 :(得分:0)
首先尝试使用理想的缓冲区大小,然后如果出现错误1450,请减小缓冲区大小并重试。
极大的缓冲区大小无法帮助提高性能,尤其是在网络上。