建立一个不能打开的文件(占坑)---C语言高级API调用
2012-08-06 17:33
489 查看
建立一个不能打开的文件。当你看懂这段代码,就是一次质的改变。
源自 windows 核心编程 扩展...
源自 windows 核心编程 扩展...
#include <windows.h> void RaiseToDebugP() { /* GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄 LookupPrivilegeValue 查询进程的权限 AdjustTokenPrivileges 调整令牌权限 */ HANDLE hToken; HANDLE hProcess = GetCurrentProcess(); if ( OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) ) { TOKEN_PRIVILEGES tkp; if ( LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid) ) { tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; BOOL bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0) ; } CloseHandle(hToken); } } int main() { BOOL bRet; LPCTSTR lpFileName ="c:\\auplicateHandle_Test.txt"; RaiseToDebugP(); HANDLE hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 4); // 微软公司窗口系统进程-- 4 为 system pid : 复制打开一个已经存在的进程对象 if ( hProcess == NULL ) { hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 8); // winOS-2K is 8 if ( hProcess == NULL ) return FALSE; } HANDLE hFile; HANDLE hTargetHandle; /* CreateFile是创建File这个内核对象,而不是创建物理磁盘上的“文件”。Win32 API中有一系列操作内核对象的函数,其大多命名为CreateXxx型。*/ hFile = CreateFile( lpFileName, GENERIC_READ, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL); //0:表示不能共享 FILE_SHARE_READ FILE_SHARE_WRITE if ( hFile == INVALID_HANDLE_VALUE ) { CloseHandle( hProcess ); return FALSE; } bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle, 0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE); CloseHandle( hProcess ); return bRet; }
相关文章推荐
- 4000 建立一个不能打开的文件(占坑)---C语言高级API调用
- fstream中建立bmp文件总是不能打开的一个处理办法
- C#技巧【调用线程无法访问此对象,因为另一个线程拥有该对象的问题的解决办法】【C#读写EXCEL源码提示“office检测到此文件存在一个问题。为帮助保护您的计算机,不能打开此文件”的解决】
- 【C语言】【unix c】文件的打开与文件的关闭(系统调用函数)
- 如何调用MFC中的函数打开一个系统资源面板,获取文件
- 不能为虚拟电脑 Custom Phone - 4.1.1 - API 16 - 768x1280 打开一个新任务.
- mfc 调用绿色版的Foxit Reader / 迷你pdf阅读器.exe的同时打开一个pdf文件
- C语言打开一个文件(有内容),倒序打印出文件中的内容
- 关于MMC不能打开文件C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SQL Server Enterprise Manager.MSC可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版本创建。也可能你没有访问此文件的足够权限
- MMC 不能打开文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版
- 关于一个工程中多个文件的相互调用的学习笔记(C语言)
- 【C#】 Debug运行文件只能运行一个(不能打开多个)
- 关于MMC不能打开文件C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SQL Server Enterprise Manager.MSC可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版本创建。也可能你没有访问此文件的足够权限
- C语言一个文件中的函数能直接调用另外一个文件中的静态函数吗? (某公司校园招聘面试试题)
- 如何建立一个打开目录对话框(类似于打开文件对话框)?
- 【C语言小程序】调用CMD命令使用文件资源管理器打开FTP
- 调用WTL中的CFileDialog来打开一个文件
- 请问C#程序中又激发一个exe文件的api?如打开记事本。
- 关于MMC不能打开文件C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SQL Server Enterprise Manager.MSC可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版本创建。也可能你没有访问此文件的足够权限
- ubuntu中sublime3在一个项目中不能同时打开多个文件