Disk2Vhdのコマンドラインでシステムで予約済みパーティションを含めつつドライブ指定をする

Windows Server 2008にはシステムで予約済みとかいう領域が勝手にできる。
この環境でVHDに含めたくないドライブがある場合、Disk2Vhdのコマンドラインが使えない。
しょうがないのでUWSCで実行した。

Option Explicit
//==============================================================================
//   Disk2vhd自動化スクリプト
//   Disk2vhdのコマンドラインだとSystem Reservedを指定できないのでUWSCにて実行
//   (アスタリスクもあるが、VHDに入れたくないドライブがある場合に対応できない)
//------------------------------------------------------------------------------
//   13.06.06 shey_nassy 新規作成
//==============================================================================
//============================================================
//   設定
//============================================================
//disk2vhdフルパス
CONST C_D2V_PATH = "C:\Documents and Settings\SheyNassy\デスクトップ\Disk2vhd\disk2vhd.exe"
//VHDファイル保存ディレクトリ(末尾\無し)
CONST C_VHD_DIR  = "F:\VHD"
//VHDファイルプレフィックス
CONST C_VHD_PREFIX = "bkup_vhd_"
//バックアップ対象ドライブ(例.aryBackUpDrive[] = "C:\","D:\")
Dim aryBackUpDrive[] = "C:\"
//============================================================
//   定数
//============================================================
//チェックボックス状態
CONST C_CHECKBOX_NULL    = -1
CONST C_CHECKBOX_OFF     =  0
CONST C_CHECKBOX_ON      =  1
CONST C_CHECKBOX_INVALID =  2

//ドライブレター用文字定数
CONST C_CHAR_C = 67
CONST C_CHAR_Z = 90
//============================================================
//   メイン処理
//============================================================

Dim WindowId=Exec(C_D2V_PATH)
If WindowId < 0 Then
   WindowId = GetId("Disk2vhd - Sysinternals: www.sysinternals.com","Disk2VhdClass")
   If WindowId < 0 Then
      ExitExit
   EndIf
EndIf

//VHDファイル名
GETTIME()
Dim strVhdFileName = C_VHD_DIR + "\" + C_VHD_PREFIX + G_TIME_YY4 + G_TIME_MM2 + G_TIME_DD2 + ".vhd"
sendstr(WindowId,strVhdFileName,1,TRUE)

//不要なドライブノチェックをはずす
Dim DriveIdx
Dim DriveLetter
Dim BackUpDriveIdx
For DriveIdx = C_CHAR_C to C_CHAR_Z
   DriveLetter = ChrB(DriveIdx) + ":\"
   For BackUpDriveIdx = 0 to Length(aryBackUpDrive) - 1
      If DriveLetter <> aryBackUpDrive[BackUpDriveIdx] Then
         CheckOff(WindowId,DriveLetter)
      EndIf
   Next
Next


//実行
//clkitem(WindowId,"Create",CLK_BTN)

//処理終了待ち合わせ
//未実装


//終了
//clkitem(WindowId,"Close",CLK_BTN)
//============================================================
//   チェック解除
//============================================================
Procedure CheckOff(pWindowId,pTitle)
   Dim strCheckStatus
   strCheckStatus = clkitem(pWindowId,pTitle,CLK_LSTVEW)
   
   If strCheckStatus = C_CHECKBOX_ON Then
      //Check Off
      CLKITEM(pWindowId,pTitle,CLK_LSTVEW)
      //クリックで選択しかされないのでスペースを送る
      SCKEY(pWindowId,VK_SPACE)
   EndIf
Fend

//============================================================
//   Memo
//============================================================
//【起動オプション】
//オプションなしでスクリプト名と引数を指定した場合は、スクリプトを実行し、実行後はUWSC本体を終了します。
//UWSC.exe スクリプト名 [引数...]
//
///L
///L オプションを付けると、実行はせずに、UWSC本体にファイルを読み込ませるのみとなります。
//UWSC.exe /L スクリプト名 [引数...]
//
///K
///K オプションを付けると、スクリプトを実行し、実行後はUWSC本体を起動したままにします。
//UWSC.exe /K スクリプト名 [引数...]
//