hur.cn - 华软网

 热门搜索

限制文件访问

  作者:未知    来源:网络    更新时间:2011/6/24
PPS的某个文件夹无法访问(Win7,不知道XP是不是也是这样),怎么做到的?

还有,我也想把我的文件做成这个样,怎么弄?
怎么禁止别人复制我的文件?可以弄一个监控程序一直运行,是不是可以弄个钩子,但是不知道钩什么,怎么钩,大侠们教教我,小弟在此谢过!
---华软 网友回答---
这个属于小case
C++">#include<windows.h>
#include<stdio.h>
#include<Tlhelp32.h>
//得到进程ID函数
DWORD GetSomeProcessID();
BOOL OccupyFile( LPCTSTR lpFileName );//锁定文件
BOOL ReleaseFile(LPCTSTR lpFileName);//释放文件
 HANDLE hTargetHandle;
int main()
{
//DWORD pID=GetCurrentProcessId();
HKEY hKey=NULL;
TCHAR szAppName[MAX_PATH]={0};
CHAR szWin7Power[MAX_PATH]=TEXT("ELEVATECREATEPROCESS WINXPSP3 RUNASADMIN");
GetModuleFileName(GetModuleHandle(NULL),szAppName,MAX_PATH);
LONG lResult = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY, NULL, &hKey, NULL);
if(lResult == ERROR_SUCCESS)
{
RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers"),0,KEY_WRITE,&hKey);
RegSetValueEx(hKey,szAppName,0,REG_SZ,(const BYTE*)&szWin7Power,sizeof(szWin7Power)+1);
}
else
{
MessageBox(NULL,TEXT("创建注册表项失败!"),TEXT("抱歉"),MB_OK|MB_ICONINFORMATION);
}

     OccupyFile("c:\\111.txt");
 printf("此时文件不能被删除、移动、重命名等\n");
system("pause");
ReleaseFile("c:\\111.txt");
    printf("此时文件可以被删除、移动、重命名等\n");
return 0;
}



void RaiseToDebugP()
{
     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);
     }    
}

BOOL OccupyFile( LPCTSTR lpFileName )
{
     BOOL     bRet=FALSE;
    
     RaiseToDebugP();

DWORD pID=GetCurrentProcessId();
     HANDLE hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, GetSomeProcessID());     // 4为system进程号

     if ( hProcess == NULL )
     {
         //hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 8);         // 2K下是 8??
        
         //if ( hProcess == NULL )
 //{
 printf("打开本进程失败,可能是你没权限");
             return FALSE;
// }
     }

     HANDLE hFile=NULL;


     hFile = CreateFile( lpFileName, GENERIC_READ, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);    


     if ( hFile == INVALID_HANDLE_VALUE )
     {
 printf("创建文件111.txt失败\n");
         CloseHandle( hProcess );
         return FALSE;
     }

     bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle, 
         0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);
 if(!bRet)
 {
printf("复制句柄失败\n");
 }
 DWORD temp=GetLastError();
     printf("%d\n",temp);
     CloseHandle( hProcess );

     return bRet;
}

BOOL ReleaseFile(LPCTSTR lpFileName)
{
 BOOL     bRet=FALSE;
    // DWORD pID=GetCurrentProcessId();
     RaiseToDebugP();

     HANDLE hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, GetSomeProcessID());   

     if ( hProcess == NULL )
     {
        // hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 8);    
        
         //if ( hProcess == NULL )
// {
 printf("打开进程失败");
             return FALSE;
// }
     }
 bRet=DuplicateHandle(hProcess,hTargetHandle,GetCurrentProcess(),NULL,0,FALSE,DUPLICATE_CLOSE_SOURCE);
 CloseHandle(hProcess);


     return bRet;
}
DWORD GetSomeProcessID()
{
DWORD pID;
HANDLE hProcessSnap=NULL;
PROCESSENTRY32 pe={0};
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==(HANDLE)-1) return 0;
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&pe))
{
  do
  {
    //pe.szExeFile 中就是进程,如果它是winword.exe 那么
    //pe.th32ProcessID 是进程ID, OpenProcess()就可以得到进程句柄
    // .....
  if(!lstrcmp(pe.szExeFile,TEXT("explorer.exe")))
  
  {
  pID=pe.th32ProcessID;
return pID;
  }
  }
  while(Process32Next(hProcessSnap,&pe));
}
CloseHandle(hProcessSnap);

}

楼主如果还是不理解,就google一下ring3文件占坑大发吧

---华软网友回复---
上面是以前写的一个例子,希望有所帮助
---华软网友回复---
多谢沙发,明天我拜读一下      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。