Guest
Public paste!

SC2

By: a guest | Mar 20th, 2010 | Syntax: Delphi | Size: 1.93 KB | Hits: 75 | Expires: Never
This paste has a previous version, view the difference. Copy text to clipboard
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.  SInfo: STARTUPINFO;
  4.   PInfo: PROCESS_INFORMATION;
  5.   hFile: THandle;
  6.   Base: Pointer;
  7.   cur: Pointer;
  8.   PID: DWORD;
  9.   Started: boolean;
  10. begin
  11.  ZeroMemory(@SInfo, SizeOf(SInfo));
  12.   SInfo.cb := SizeOf(SInfo);
  13.   ZeroMemory(@PInfo, SizeOf(PInfo));
  14.  if CreateProcess(PChar(exe), nil, nil, nil, false, CREATE_SUSPENDED, nil, PChar(Dir), SInfo, PInfo) then
  15.    begin
  16.      hFile := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_EXECUTE_READWRITE, 0, $10000, 'StarCraft II IPC Mem');
  17.    if hFile <> INVALID_HANDLE_VALUE then
  18.        begin
  19.          Base := MapViewOfFile(hFile, FILE_MAP_ALL_ACCESS, 0, 0, $10000);
  20.      if Base <> nil then
  21.            begin
  22.              cur := Base;
  23.        ZeroMemory(cur, $10000);
  24.               inc(PByte(cur), $20);
  25.               PByte(cur)^ := $04;
  26.               PID := GetCurrentProcessId;
  27.               inc(PByte(cur), 8);
  28.               PDWord(cur)^ := PID;
  29.               inc(PByte(cur), 4);
  30.        PDWord(cur)^ := $00000001;
  31.               inc(PDWord(cur), 7);
  32.               PDWord(cur)^ := $00000002;
  33.               inc(PDWord(cur));
  34.        PDWord(cur)^ := $FFFFFFFF;
  35.        inc(PDWord(cur), 2);
  36.               PDWord(cur)^ := $FFFFFFFF;
  37.               inc(PDWord(cur), 2);
  38.               StrPCopy(PAnsiChar(cur), AnsiString(Map));
  39.               ResumeThread(Pinfo.hThread);
  40.               Started := false;
  41.        repeat
  42.                cur := Base;
  43.                inc(PByte(cur), $20);
  44.                if PByte(cur)^ = $05 then
  45.                 begin
  46.                   inc(PByte(cur), 4);
  47.                  if PByte(cur)^ = $01 then
  48.                    begin
  49.                    PByte(cur)^ := 0;
  50.                       Started := true;
  51.                  end;
  52.                  end;
  53.               until Started;
  54.             end;
  55.         end;
  56.  
  57.       CloseHandle(hFile);
  58.     end;
  59.   CloseHandle(Pinfo.hThread);
  60.   CloseHandle(PInfo.hProcess);
  61. end;