unit DDrmAssistorMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Tocsg.Process, Vcl.ExtCtrls; type TDlgDrmAssistorMain = class(TForm) Button1: TButton; tAtiveV: TTimer; procedure Button1Click(Sender: TObject); procedure tAtiveVTimer(Sender: TObject); private { Private declarations } dwCurPid_, dwOpenTick_, dwChildExePid_: DWORD; sOpenFName_: String; ThdAppMon_: TThdProcessWatch; procedure OnAppNotify(aSender: TThdProcessWatch; pEnt: PPwEnt; aKind: TProcessWatchKind); public { Public declarations } Constructor Create(aOwner: TComponent); override; Destructor Destroy; override; end; var DlgDrmAssistorMain: TDlgDrmAssistorMain; implementation uses BoxedAppSDK_Static, // BoxedAppSDK_DLL, Tocsg.Safe, Tocsg.Shell, Winapi.ShellAPI, Tocsg.Trace, Tocsg.WndUtil, Tocsg.Path; {$R *.dfm} Constructor TDlgDrmAssistorMain.Create(aOwner: TComponent); begin Inherited Create(aOwner); sOpenFName_ := ''; dwOpenTick_ := 0; dwCurPid_ := GetCurrentProcessId; dwChildExePid_ := 0; ThdAppMon_ := nil; BoxedAppSDK_SetContext('21f2f010-06e4-465f-af8f-cde6a3752c39'); BoxedAppSDK_Init; // BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__INHERIT_OPTIONS, TRUE); // BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__ALL_CHANGES_ARE_VIRTUAL, TRUE); BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, TRUE); // BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__HIDE_VIRTUAL_FILES_FROM_FILE_DIALOG, TRUE); // BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__EMULATE_OUT_OF_PROC_COM_SERVERS, TRUE); end; Destructor TDlgDrmAssistorMain.Destroy; begin // BoxedAppSDK_Exit; if ThdAppMon_ <> nil then FreeAndNil(ThdAppMon_); Inherited; end; procedure TDlgDrmAssistorMain.OnAppNotify(aSender: TThdProcessWatch; pEnt: PPwEnt; aKind: TProcessWatchKind); var sHlpExe: String; h: HWND; begin case aKind of pwkUnknown : {$IFDEF DEBUG} ASSERT(false) {$ENDIF}; // pwkInit, pwkExecute : begin if dwCurPid_ = pEnt.dwPPid then begin dwChildExePid_ := pEnt.dwPid; tAtiveV.Enabled := true; end; end; pwkTerminated : begin if pEnt.dwPid = dwChildExePid_ then TerminateProcess(GetCurrentProcess, 100); end; end; end; procedure TDlgDrmAssistorMain.tAtiveVTimer(Sender: TObject); var h: HWND; sPath, sCaption: String; begin if dwChildExePid_ <> 0 then begin h := GetForegroundWindow; if h <> 0 then begin sCaption := GetWindowCaption(h); if sCaption = '' then exit; if GetProcessPIDFromWndHandle(h) = dwChildExePid_ then begin if (Pos(sOpenFName_, UpperCase(sCaption)) = 0) and ((GetTickCount - dwOpenTick_) < 3000) then exit; tAtiveV.Enabled := false; sPath := 'C:\taskToCSG\Tocsg.Module\TocsgDRM\OUT_Debug - Win32\ccc.txt'; if FileExists(sPath) then DeleteFile(sPath); // WriteLnFileEndUTF8(sPath, IntToStr(h)); // InjectModule(dwChildExePid_, GetRunExePathDir + 'DrmAssistor.dll'); BoxedAppSDK_RemoteProcess_LoadLibrary(dwChildExePid_, PChar(GetRunExePathDir + 'DrmAssistor.dll')); if BoxedAppSDK_IsAttachedProcessId(dwChildExePid_) then begin BoxedAppSDK_RemoteProcess_EnableOption(dwChildExePid_, DEF_BOXEDAPPSDK_OPTION__ALL_CHANGES_ARE_VIRTUAL, TRUE); // ShowMessage('¼º°ø!'); end else ShowMessage('½ÇÆÐ...'); end; end; end; end; procedure TDlgDrmAssistorMain.Button1Click(Sender: TObject); var sPath, sVPath, sVEPath: String; hFile: THandle; ms: TMemoryStream; dwTemp: DWORD; StartupInfo: TStartupInfo; ProcInfo: TProcessInformation; sDir: String; ShellExeInfo: TShellExecuteInfo; dwPid: DWORD; begin // sPath := 'C:\Users\tocsg\Desktop\ÀçÅñٹ«PC º¸¾ÈÅëÁ¦ ¼Ö·ç¼Ç µµÀÔ RFI_v1.0.pdf'; sPath := 'C:\Users\tocsg\Desktop\Áö½Ä°øÀ¯ ÀýÂ÷¼­ v1.0_220110.docx'; // sPath := 'C:\Users\tocsg\Desktop\Áö½Ä°æÁ¦ºÎ Á¤º¸º¸¾È ¼¼ºÎ Áöħ.hwp'; // sPath := 'C:\Users\tocsg\Desktop\cutproc.exe'; // ExecutePath('explorer.exe', sPath); // exit; if not FileExists(sPath) then begin ShowMessage('Fail .. 1'); exit; end; Guard(ms, TMemoryStream.Create); ms.LoadFromFile(sPath); // sDir := ExtractFilePath(sPath) + '$VVV\'; sDir := ExtractFilePath(sPath); // if not BoxedAppSDK_CreateVirtualDirectory(PChar(sDir), nil) then // exit; // sVPath := '@TgDRM\' + sPath; // sVPath := sDir + ExtractFileName(sPath); sVPath := sDir + '$1_' + ExtractFileName(sPath); if not FileExists(sVPath) then begin hFile := BoxedAppSDK_CreateVirtualFile(PChar(sVPath), // GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_NEW, FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_READONLY, 0); GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_NEW, FILE_ATTRIBUTE_HIDDEN, 0); // GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_NEW, FILE_ATTRIBUTE_ARCHIVE, 0); if (hFile = 0) or (hFile = INVALID_HANDLE_VALUE) then begin ShowMessage('Fail .. 2'); exit; end; dwTemp := 0; WriteFile(hFile, ms.Memory^, ms.Size, dwTemp, nil); CloseHandle(hFile); end; // WinExec(PAnsiChar(AnsiString(Format('notepad.exe "%s"', [sVPath]))), SW_SHOW); // WinExec(PAnsiChar(AnsiString(sVPath)), SW_SHOWNORMAL); // ExecutePath('explorer.exe', '"' + sVPath + '"'); // ExecutePath('"C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe"', '"' + sVPath + '"'); ThdAppMon_ := TThdProcessWatch.Create(true); ThdAppMon_.OnProcessWatchNotify := OnAppNotify; ThdAppMon_.StartThread; // ExecutePath('"C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE"', '"' + sVPath + '"'); sOpenFName_ := UpperCase(ExtractFileName(sVPath)); dwOpenTick_ := GetTickCount; ExecutePath(sVPath); Button1.Enabled := false; // dwPid := GetProcessPidByName('WINWORD.EXE'); // if dwPid <> 0 then // begin // BoxedAppSDK_RemoteProcess_EnableOption(dwPid, DEF_BOXEDAPPSDK_OPTION__INHERIT_OPTIONS, TRUE); // BoxedAppSDK_RemoteProcess_EnableOption(dwPid, DEF_BOXEDAPPSDK_OPTION__ALL_CHANGES_ARE_VIRTUAL, TRUE); // BoxedAppSDK_RemoteProcess_EnableOption(dwPid, DEF_BOXEDAPPSDK_OPTION__HIDE_VIRTUAL_FILES_FROM_FILE_DIALOG, TRUE); // end; // ProcInfo := ExecuteApp('C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE', '"' + sVPath + '"', SW_SHOWNORMAL); // if ProcInfo.dwProcessId <> 0 then // begin //// BoxedAppSDK_RemoteProcess_EnableOption(ProcInfo.dwProcessId, DEF_BOXEDAPPSDK_OPTION__INHERIT_OPTIONS, TRUE); // BoxedAppSDK_RemoteProcess_EnableOption(ProcInfo.dwProcessId, DEF_BOXEDAPPSDK_OPTION__ALL_CHANGES_ARE_VIRTUAL, TRUE); //// BoxedAppSDK_RemoteProcess_EnableOption(ProcInfo.dwProcessId, DEF_BOXEDAPPSDK_OPTION__HIDE_VIRTUAL_FILES_FROM_FILE_DIALOG, TRUE); // end; // ZeroMemory(@ShellExeInfo, SizeOf(ShellExeInfo)); // ShellExeInfo.cbSize := SizeOf(ShellExeInfo); // ShellExeInfo.fMask := SEE_MASK_NOCLOSEPROCESS; // ShellExeInfo.lpVerb := 'open'; // ShellExeInfo.nShow := SW_SHOWNORMAL; // ShellExeInfo.lpFile := PChar(sVPath); // ShellExecuteEx(@ShellExeInfo); // // // if ShellExeInfo.hProcess <> 0 then // begin // dwPid := GetProcessId(ShellExeInfo.hProcess); //// BoxedAppSDK_RemoteProcess_EnableOption(dwPid, DEF_BOXEDAPPSDK_OPTION__INHERIT_OPTIONS, TRUE); // BoxedAppSDK_RemoteProcess_EnableOption(dwPid, DEF_BOXEDAPPSDK_OPTION__ALL_CHANGES_ARE_VIRTUAL, TRUE); //// BoxedAppSDK_RemoteProcess_EnableOption(dwPid, DEF_BOXEDAPPSDK_OPTION__HIDE_VIRTUAL_FILES_FROM_FILE_DIALOG, TRUE); //// ShowMessage(GetProcessNameByPid(dwPid)); // end; // ms.Clear; // ms.LoadFromFile('C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE'); // ZeroMemory(@ProcInfo, SizeOf(ProcInfo)); // ZeroMemory(@StartupInfo, SizeOf(StartupInfo)); // StartupInfo.cb := Sizeof(StartupInfo); // StartupInfo.dwFlags := STARTF_USESHOWWINDOW; // StartupInfo.wShowWindow := SW_SHOWNORMAL; // StartupInfo.dwX := 0; // StartupInfo.dwY := 0; // // if not BoxedAppSDK_CreateProcessFromMemoryW(ms.Memory, ms.Size, nil, PChar('"' + sVPath + '"'), // nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS or CREATE_SUSPENDED, nil, nil, StartupInfo, ProcInfo) then // ShowMessage('½ÇÆÐ'); end; end.