求助 关于CreateFileMapping API 返回错误 error 是5

web112345 2017-08-10 08:44:34
BOOL GetFileNameFromHandle(HANDLE hFile, wchar_t * pOutput)
{
TCHAR pszFileName[MAX_PATH];
HANDLE hFileMap;
PVOID pMem;

//获取文件大小
DWORD dwFileSizeHigh = 0;

DWORD dwFileSizeLow = GetFileSize(hFile, &dwFileSizeHigh);
if (dwFileSizeLow == 0 && dwFileSizeHigh == 0)
return FALSE;
//创建Mapping对象
hFileMap = CreateFileMapping(hFile,
NULL,
PAGE_READONLY,
0,
1,
NULL);
if (!hFileMap)
{
CString strError;
DWORD errorNumber = GetLastError();
strError.Format(L"%d", errorNumber);
AfxMessageBox(strError);
return FALSE;
}
pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1);
if (!pMem)
return FALSE;

//从Mapping对象获得文件名
if (0 == GetMappedFileName(GetCurrentProcess(),
pMem,
pszFileName, //以设备名的形式获得文件路径,运行时设个断点查看即可
MAX_PATH))
return FALSE;

TCHAR szTemp[MAX_PATH] = { 0 };
//获取电脑上的所有驱动器,如"C:\" "D:\"等,连续放置的
if (0 == GetLogicalDriveStrings(BUFSIZE - 1, szTemp))
return FALSE;

TCHAR szName[MAX_PATH];
TCHAR szDrive[3] = { 0 };
BOOL bFound = FALSE;
//通过指针p的移动来顺序访问所有的驱动器目录
PTCHAR p = szTemp;
do
{
CopyMemory(szDrive, p, 2 * sizeof(TCHAR));
//通过路径查找设备名,如"C:"
if (!QueryDosDevice(szDrive, szName, BUFSIZE))
{
printf("QueryDosDrive error: %d", GetLastError());
return FALSE;
}
UINT uNameLen = lstrlen(szName);
if (uNameLen < MAX_PATH)
{
//比较驱动器的设备名文件名与文件设备名是否匹配

bFound = wcsncmp(pszFileName, szName, uNameLen) == 0;//原来还有这种写法
if (bFound)
{
//如果匹配,说明已找到,构造路径
TCHAR szTempFile[MAX_PATH];
wsprintf(szTempFile,
TEXT("%s%s"),
szDrive,
pszFileName + uNameLen);
lstrcpy(pszFileName, szTempFile);
}
}
//这里不理解的话可以去看看GetLogicalDriveStrings
while (*p++);
} while (!bFound && *p);

UnmapViewOfFile(pMem);
CloseHandle(hFileMap);
//printf("File Path is %s\n", pszFileName);
//*pOutput = pszFileName;
memcpy(pOutput, pszFileName, MAX_PATH);
return TRUE;
}

这段代码功能是根据文件句柄 获取文件路径
我在别人博客看到的 然后我试了下有些可以获取 但是有些根据句柄获取就会出错 CreateFileMapping返回值是0
用GetLastError()获取错误号是5 求大神帮助
谢谢了
...全文
384 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
web112345 2017-08-11
  • 打赏
  • 举报
回复
我试了 是文件夹关系 我用cookie路径 创建 然后用这个获取 是失败的 用其他的文件夹就可以
web112345 2017-08-10
  • 打赏
  • 举报
回复
引用 3 楼 VisualEleven 的回复:
管理员权限运行~
谢谢 还是不行 我是获取的cookie文件写入时临时文件夹 我怀疑 可能是临时文件夹的问题 也有可能是文件 CreateFile时属性问题 等下在试试
Eleven 2017-08-10
  • 打赏
  • 举报
回复
管理员权限运行~
web112345 2017-08-10
  • 打赏
  • 举报
回复
引用 1 楼 shakaqrj 的回复:
5是拒绝访问
大神 请问有什么办法能让他不拒绝吗
shakaqrj 2017-08-10
  • 打赏
  • 举报
回复
5是拒绝访问

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧