建立一个不能打开的文件(占坑)---C语言高级API调用

来源:互联网 发布:货物找车软件 编辑:程序博客网 时间:2024/05/16 14:28

建立一个不能打开的文件。当你看懂这段代码,就是一次质的改变。

源自 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;}

 

原创粉丝点击