Win 7はWinlogon.exeプロセスコードを修正します.

2331 ワード

まず私が使う方法は必ずしも一番いいとは限らないですが、一番簡単かもしれません.回復できる方法です.
win logon.exeプロセスの具体的な位置は1バイトを書き込み、Win+Lを遮断しました.もちろんCtrl+Alt+Del、Ctrl+Shift+Esc、Win+Pなどは全部遮蔽できます.原理はご存知です.
原理は多く言いません.分かりません.直接見ます.http://bbs.pediy.com/showthread.php?t=159346
このプログラムは
Win 7はどのようにショートカットキーを禁止しますか?
win 7は大体同じです.だめなら、自分の状況によってオフセットを修正してください.とにかくテストに成功しました.
Win+Lデモのスクリーンショットを貼る
プレゼンテーションは64ビットです.32ビットがないので. 
win 7システムはテストをします.具体的なオフセットは分かりません.
具体的なコードを送ってください.Win+LのIDは5、Ctrl+Shift+EscのIDは4、Ctrl+Alt+DelのIDは0です.
コード:
/*
      PID
*/
DWORD GetPidByProcessName(LPCTSTR pszName)
{
  PROCESSENTRY32    pe32;
  HANDLE        hSnapshot;

  hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnapshot == INVALID_HANDLE_VALUE)
    return -1;
  
  pe32.dwSize = sizeof(PROCESSENTRY32);
  if( !Process32First( hSnapshot, &pe32 ) )
  {
    CloseHandle(hSnapshot);
    return -1;
  }

  do
  {
    if(lstrcmpi(pe32.szExeFile, pszName) == 0)
    {
      CloseHandle(hSnapshot);
      return pe32.th32ProcessID;
    }
  }
  while ( Process32Next(hSnapshot, &pe32) );

  CloseHandle(hSnapshot);

  return -1;
}

/*
  Win+L  ,  bDisable      
*/
BOOL DisableHotKey(BOOL bDisable)
{
  UCHAR      uchOrigCode[] = {0x05};
  UCHAR      uchHookCode[] = {0x25};
  UCHAR      uchReadCode[] = {0x00};
  LPVOID      lpReadAddress;
  DWORD      dwPID;
  HANDLE      hProcess;
  HMODULE      lphModule[512];
  DWORD_PTR    dwReturn;
  DWORD      dwOldProtect;
  INT        i;

  //  winlogon.exe  PID
  if(!(dwPID = GetPidByProcessName(_T("winlogon.exe"))))
    return FALSE;
  
  //    
  if(!(hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID)))
    return FALSE;

  //      
  if(!EnumProcessModules(hProcess, lphModule, sizeof(lphModule), (LPDWORD)&dwReturn))
  {
    CloseHandle(hProcess);
    return FALSE;
  }
  
  //          
  lpReadAddress = (LPVOID)((LPSTR)lphModule[0] + 0x1710D);
  if(bDisable)
  {
    //       
    if(!ReadProcessMemory(hProcess, lpReadAddress, uchReadCode, sizeof(uchReadCode), &dwReturn))
    {
      CloseHandle(hProcess);
      return FALSE;
    }

    //           
    for(i=0; i 
   
このプレゼンテーションは64ビットしかありません.
win 7 64人が運行しています.32人も同じぐらいです.