C++ 別ユーザでプロセスを起動する

ユーザーアカウント制御の導入によりEXEファイルの実行に、ユーザ許可が必要になった。
Administrator権限を持つユーザで実行する事により、ユーザーアカウント制御の許可を必要とせずに実行する。

前提条件

  • Visual Studio - Visual C++ - Win32コンソールアプリケーション
  • 引数で指定するユーザはAdministrator権限を持つユーザ
  • RunasExec.exe ユーザ名 パスワード ファイルパス で実行

RunasExec.cpp

#include "stdafx.h"
#include <Windows.h>
#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    if (argc < 4) {

        // 異常終了
        return 9;
    }

    // 引数の値を取得
    wstring userName = argv[1];
    wstring password = argv[2];
    wstring filePath = argv[3];

    STARTUPINFO         sinfo;
    PROCESS_INFORMATION pinfo;
    ZeroMemory( &sinfo, sizeof( STARTUPINFO ) );
    ZeroMemory( &pinfo, sizeof( PROCESS_INFORMATION ) );
    sinfo.cb = sizeof( STARTUPINFO );

    // 別ユーザでプロセス起動
    if (!CreateProcessWithLogonW(
        userName.c_str(),            // ユーザ名
        NULL,                        // ドメイン名
        password.c_str(),            // パスワード
        0,                           // ログオン オプション
        NULL,                        // 実行可能モジュール名
        (LPWSTR) filePath.c_str(),   // ファイルパス
        CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP,    // 作成フラグ
        NULL,                        // 新しい環境ブロック
        NULL,                        // カレントディレクトリの名前
        &sinfo,
        &pinfo)) {

        // 異常終了
        return 9;
    }

    CloseHandle(pinfo.hThread);
    CloseHandle(pinfo.hProcess);

    // 正常終了
    return 0;
}

僕のヒーローアカデミア 17

ミリオいいね、主人公だわ。
弱さを認めて成長するし、個性の精細な使い方が素晴らしい。

エリちゃんは治崎の実の娘じゃなかったですね。
前の巻の感想で洗脳率が低いって書きましたが、組長の孫だったんですね。
なら、納得かな。

この巻、話が進むにつれて、みんなバカになっていく感じが凄いですね。
描きたい展開があって、それになぞってキャラクターを動かしていく感じが、また出てきました。
特に サー は酷い。
いいキャラだとは思っているんだけど、出てきた章で壊す所まで行くのはどうんだろう。
予知した未来を捻じ曲げるデク→オールマイトの後継者→主人公みたいな説得を持たせたいんだろうけどさ。
そのためにミリオとサーを消耗的に使う感じがして浅いなぁと思ってしまう。

治崎は仲間と合体するだけで自分ではない個性を使えるのは納得いかないなぁ。
まぁどうでもいいか。

デクのエリちゃんの能力の戻す速度がわかったから、その分、自身を壊してチャラにする発言は狂人すぎてヤバイですね。
私としては治崎から逃げ切れば勝ちだと思うんですが、あえて戦闘する必要ないと思うんですけどね。

この後の展開は、わかんないですが、この章のストーリーは、あくまでも学生なので主人公チームはエリちゃんの救出に注力し、治崎との戦闘はプロに任せるという流れが自然に思いますね。

kameyatakefumi.hatenablog.com
kameyatakefumi.hatenablog.com

Linux標準教科書3

10章

11章

  • 自動マウント
    • /etc/fstab 設定ファイル
  • リムーバブルメディアのマウント
    • /mnt, /media
    • mount -t iso9660 -o ro /dev/cdrom /media/cdrom

kameyatakefumi.hatenablog.com

Linux標準教科書2

7章

  • コンソール
    • $ ユーザ権限
    • # 管理者権限
  • ユーザ /etc/passwd
    • useradd
    • usermod
    • userdel
  • グループ /etc/group
    • ユーザは必ず1つ以上のグループに所属していて、主に所蔵するグループをプライマリグループと呼びます。
    • groupadd
    • groupmod
    • groupdel ユーザが所属していないグループのみ削除できる。
  • パスワードとパスワードファイル /etc/shadow
    • パスワードファイル /etc/passwd
      • account:password:UID:GID:GECOS:directory:shell
    • グループファイル /etc/group
      • group_name:password:GID:user_list
    • シャドウファイル /etc/shadow
      • acount:password:last_changed:may_be_changed:must_be_changed:warned:expires:disabled:reservered
    • passwd
  • 用意されているグループとユーザ
    • su
    • sudo
      • CentOSでは初期設定のままではsudoコマンドは利用できない。sudoコマンドを使うにはユーザをwheelグループというスーパーユーザ(root)特権を持つグループに登録する必要があります。
      • sudoの設定は /etc/sudoersファイルを編集することでユーザがsudoコマンドを利用できるようになります。
        • visudo sudo権限ファイルを編集するコマンド
        • vigr グループファイルを編集するコマンド

8章

  • chown
  • chgrp
  • chmod
    • ファイルを所有するユーザ、ファイル所有グループから所有者を抜いたユーザ、その他のユーザの3つのレベルで権限が設定できる。
    • 読み、書き、実行
    • setuid, setgid, sticky
  • umask

9章

  • シェルの指定 #!/bin/bash
  • パーミッションの変更
  • echo
  • export 環境変数
  • read
  • set シェル変数の一覧表示
  • unset
  • env 環境変数の一覧表示
  • # コメント
  • 引用符
    • シングルクオート 文字列
    • ダブルクオート 引用符内に変数があった場合展開
    • バッククオート 引用符内にコマンドがあった場合実行
  • 引数 $1, $2, ... $0は実行コマンド名、$#は引数の数
  • shift
  • エスケープシーケンス \ バックスラッシュ 改行にも使用可能
  • source
    • シェルの環境設定ファイル .bashrc や .bash_profile などを設定変更後、ログインしなおさずに設定を有効する場合に使用
  • if then elif then else then fi
    • 文字列比較 == !=
    • 数値比較 -eq -ne -ge -le -gt -lt
    • ファイル属性の確認 if test -d パス ; then ...
    • 論理積
      • [条件A -a 条件B -a 条件C]
      • [条件A] && [条件B] && [条件C]
    • 論理和
      • [条件A -o 条件B -o 条件C]
      • [条件A] || [条件B] || [条件C]
    • case
    • 繰り返し
      • for
        • for i in `ls`
      • while/until
      • select
      • break, continue
    • サブルーチン(関数)
      • function 関数名 { 処理 }
      • return
    • sh -x

kameyatakefumi.hatenablog.com
kameyatakefumi.hatenablog.com

Linux標準教科書1

1章

  • シェル
    • 入力されたコマンドを理解し、それを実行します。
    • 自動実行の環境を提供する。
  • RPM(RedHat Packaging Manager、現在では RPM Package Manager を指す)

3章

ファイル操作
  • ls(LiSt)
    • ls *.conf, ls ???.conf
  • cp(CoPy)
  • mv(MoVe)
  • rm(ReMove) 一度削除したファイルを復活させる事はできません。
ディレクトリ操作
  • pwd(Print Working Directory)
  • cd(Change Directory)
  • mkdir
  • rmdir ファイルが存在してると削除できない。
  • cat(Catenate)
  • more
  • less
  • find
  • which
  • コマンド --help ヘルプ
  • man コマンド マニュアル

4章

  • 1つの入口と2つの出口(標準入力、標準出力、標準エラー出力)
  • リダイレクト >
  • アペンド(上書き) >>
  • コマンド→標準出力 | 標準入力→コマンド
  • grep

5章

  • touch ファイルのタイムスタンプの変更
  • head
  • tail
    • tail -f(follow)
  • sort
  • uniq
  • tr(TRanslate)
  • diff

6章

  • vi
    • :q(quit)
    • :w(write)
    • I 行の先頭まで移動してインサートモード
    • A 行末まで移動してインサートモード
    • :n 行移動
    • gg 1行目へ移動
    • G 最終行へ移動
    • x 1文字削除 dd 1行削除 yy 1行コピー nyy n行コピー p 次にペースト P 前にペースト u アンドゥ
    • /検索文字列 n 下方向へ再検索 N 上方向へ再検索
    • :対象行s/検索文字列/置換文字列/オプション
      • :ns/old/new n行目の最初のoldをnewに置換して終了
      • :ns/old/new/g n行目の全てのoldをnewに置換して終了
      • :%s/old/new/g ファイル全体の検索語句を置換する
      • :%s/old/new/gc 置換の毎に確認を求める

kameyatakefumi.hatenablog.com