0

MS detour ライブラリを使用して CreateProcess をフックすると、Win7 で正常に動作します。次に、迂回したCreateProcessをShellExecuteExに置き換えて、「runas」を使用して管理者権限でプログラムをサイレントに実行できるようにします。残念ながら、パラメーターの型は同じではありません。

これは関数のシグネチャです:

CreateProcess( 
         LPCWSTR lpszImageName, 
         LPCWSTR lpszCmdLine, 
         LPSECURITY_ATTRIBUTES lpsaProcess, 
         LPSECURITY_ATTRIBUTES lpsaThread, 
         BOOL fInheritHandles, 
         DWORD fdwCreate, 
         LPVOID lpvEnvironment, 
         LPWSTR lpszCurDir, 
         LPSTARTUPINFOW lpsiStartInfo, 
         LPPROCESS_INFORMATION lppiProcInfo 
      ); 

ここでは、ShellExecuteEx を呼び出します。

SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = 0 ;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = lpszImageName; // this is obatined within deboured CreateProcess.
ShExecInfo.lpParameters = ""; 
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL; 
ShellExecuteEx(&ShExecInfo);

ただし、この割り当てにはエラーがあります: ShExecInfo.lpFile = lpszImageName; VC2005 は、データ型が同じではないと訴えています: "cannot convert from const unsigned char * to const char *"

LPCWSTRただし、 CreateProcess のパラメーター lpszImageNameのデータ型はであり、ShExecInfo.lpFile はLPCTSTRです。

(const unsigned char*) を使用して lpszImageName を変換すると、lpFile の値は lpszImageName 値の最初の文字のみになります。

たとえば、lpszImageName が「C:\windows\system32\cmd.exe」の場合。割り当て後、lpFile 値は「C」のみです。

LPCWSTR から LPCTSTR に変換するにはどうすればよいですか? または、どうすれば変換できますか?

ありがとう!!!

4

1 に答える 1

1

CreateProcessW() をフックして、それを ShellExecuteExA() にマップしようとしているようです。代わりに、ShellExecuteExW() にマップし、ワイド (LPCWSTR) 文字列を使用する SHELLEXECUTEINFOW 構造体を使用します。

于 2010-09-15T03:56:56.700 に答える