Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;CreateFile函数使用UAC锁定文件_C++_Visual Studio_Createfile - Fatal编程技术网

C++ C++;CreateFile函数使用UAC锁定文件

C++ C++;CreateFile函数使用UAC锁定文件,c++,visual-studio,createfile,C++,Visual Studio,Createfile,我正在处理一个DLL文件,它将一个资源文件(.exe)从它提取到临时文件夹并执行它。问题是,除非使用DLL文件的应用程序被提升(具有管理员权限),否则无法执行该文件。当我从文件资源管理器打开临时文件夹并双击提取的文件时,我会得到一个UAC提示。当我点击“当此通知出现时更改”时,它被设置为默认值(当程序试图更改您的计算机时)。我真的不明白为什么我会收到这个通知,因为它只是一个随机文件,在我的电脑上没有权限运行,除非它是从DLL中提取的。我使用Windows 8和Visual Studio 2013

我正在处理一个DLL文件,它将一个资源文件(.exe)从它提取到临时文件夹并执行它。问题是,除非使用DLL文件的应用程序被提升(具有管理员权限),否则无法执行该文件。当我从文件资源管理器打开临时文件夹并双击提取的文件时,我会得到一个UAC提示。当我点击“当此通知出现时更改”时,它被设置为默认值(当程序试图更改您的计算机时)。我真的不明白为什么我会收到这个通知,因为它只是一个随机文件,在我的电脑上没有权限运行,除非它是从DLL中提取的。我使用Windows 8和Visual Studio 2013。以下是DLL文件的部分代码:

    HANDLE hFile = CreateFile(exePath, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE) continue;
    WriteFile(hFile, pExeResource, SizeofResource(hinstDLL, hrsrc), NULL, NULL); 
    CloseHandle(hFile);
    if (!CreateProcess(exePath, NULL, NULL, NULL, FALSE, REALTIME_PRIORITY_CLASS, NULL, tmpPath, &info, &pi))
        cout << "FAIL !\n";
    else cout << "SUCCESS !\n";
HANDLE hFile=CreateFile(exePath,GENERIC\u WRITE,FILE\u SHARE\u READ,NULL,CREATE\u ALWAYS,FILE\u ATTRIBUTE\u NORMAL,NULL);
如果(hFile==无效的句柄值)继续;
WriteFile(hFile、pexesource、SizeofResource(hinstDLL、hrsrc)、NULL、NULL);
闭合手柄(hFile);
if(!CreateProcess(exePath,NULL,NULL,NULL,FALSE,REALTIME\u PRIORITY\u CLASS,NULL,tmpPath,&info,&pi))

cout正在哪里创建临时文件夹?您的用户帐户设置是否设置为您尝试运行的任何exe文件都会提示您输入UAC auth?UAC是基于安全方案设置的,并应用于操作系统控制的某些文件夹(如
C:\Program Files
),而不一定是如何创建文件的。为什么要使用实时\u优先级\u类?我认为这需要管理员权限。对于UAC提示,父应用程序运行的帐户是什么?它与您的登录帐户相同吗?如果没有,那么这可能是一个错误reason@RyanJ临时文件夹位于C:\Users\User\AppData\Local\temp,它肯定不是受UAC保护的文件夹。如果文件不是从DLL中提取出来的,但提取出来后会提示,则执行时不会提示。@GaneshR。问题并非来自舒尔的CreateProcess功能,因为即使我从windows资源管理器中手动双击该文件,它仍然会提示。