Windows NT/2000/XP/2003/2008 PageWindows 2000のページ > 他のユーザー権限でプログラムを実行したい
他のユーザー権限でプログラムを実行したい


現在ログインしているユーザーと異なる権限でプログラムを実行したい場合、 GUI上で右クリックで別のユーザーとして実行で実行できます。
コマンドライン上からもRUNAS.EXEを使用すると実行できます。
runas /netonly /user:administrator "notepad.exe"
なお、runasを実行するためには、RunAS Serverが起動している必要があります。


下記のプログラムでインストーラを起動すれば、権限のないユーザーにもAdministratorsなどの権限でプログラムを起動することができます。
#include "stdafx.h"
#include <windows.h>
#include <string.h>

#define Buffers	0x200
#define LOGON_WITH_PROFILE	0x00000001

typedef BOOL (WINAPI *CREATEPROCESSWITHLOGONWD)(LPCWSTR lpUsername,
					LPCWSTR lpDomain,LPCWSTR lpPassword,DWORD dwLogonFlags,
					LPCWSTR lpApplicationName,LPWSTR lpCommandLine,
					DWORD dwCreationFlags,LPVOID lpEnvironment,
					LPCWSTR lpCurrentDirectory,LPSTARTUPINFOW lpStartupInfo,
					LPPROCESS_INFORMATION lpProcessInformation);

CREATEPROCESSWITHLOGONWD CreateProcessWithLogonWD = NULL;

int main(int argc, char* argv[])
{
	WCHAR cmd[Buffers];
	WCHAR user[Buffers];
	WCHAR domain[Buffers];
	WCHAR pass[Buffers];
	STARTUPINFOW			si;
	PROCESS_INFORMATION pi;

	HMODULE hADVAPI32;

	hADVAPI32 = LoadLibrary("ADVAPI32.DLL");
	if(hADVAPI32 < (HINSTANCE)HINSTANCE_ERROR)
		return(-3);
	CreateProcessWithLogonWD = (CREATEPROCESSWITHLOGONWD)
		GetProcAddress(hADVAPI32,"CreateProcessWithLogonW");
	if ( CreateProcessWithLogonWD == NULL )
		return(-2);

	MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,"UserName",-1,user,sizeof user);
	MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,"Domian",-1,domain,sizeof domain);
	MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,"Program.exe",-1,cmd,sizeof cmd);
	MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,"Password",-1,pass,sizeof pass);

	si.cb			= sizeof(si);
	si.lpReserved	= NULL;
	si.lpDesktop	= NULL;
	si.lpTitle		= NULL;
	si.dwFlags		= 0;
	si.cbReserved2	= 0;
	si.lpReserved2	= NULL;

	if ( CreateProcessWithLogonWD(user,domain,pass,LOGON_WITH_PROFILE,NULL,cmd,
			CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE |
			CREATE_NEW_PROCESS_GROUP  | CREATE_SEPARATE_WOW_VDM,
			NULL,NULL,&si,&pi) == FALSE ){
		printf("実行エラー\n");
		return(-1);
	}
	return 0;
}
注意事項
このページの管理人はプログラミングは初心者です。使用の結果については一切責任を持ちません。
また、内容への突っ込みもご遠慮ください。