建立一个不能打开的文件(占坑)---C语言高级API调用
建立一个不能打开的文件。当你看懂这段代码,就是一次质的改变。
源自 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; }
世界如此的美好,江山如此的多娇!
---阳光正能量--->>>>>>>>>>>>>>>