Windows Management Instrumentation (4)

WQL文を作成する時に、色々とパラメータを設定したいケースに対応するため、メソッドを作りました。

wmi.hに、

    static      String      createSelect(_TCHAR *format, ...);

を追加して
wmi.cppに

/*
 *  文字列を整形してWQL文を構築する
 *  param   : パラメータ
 *
 *  return  : String
 */
String WmiCall::createSelect(_TCHAR *format, ...) {
    va_list args;
    va_start(args, format);
    _TCHAR *result = NULL;
    int area_len = 0;
    int alloc_len = 2048;
    do {
        result = (_TCHAR *)calloc(alloc_len, sizeof(_TCHAR));
        if (result != NULL) {
            int area_len = _vsntprintf(result, alloc_len, format, args);
            if (area_len < 0)
                alloc_len += 512;
        }
        else
            area_len = 0;
    } while (area_len < 0);
    va_end(args);
    String value;
    if (result != NULL) {
        value = String(result);
        free(result);
    }
    return value;
}

を追加しました。

String wql = WmiCall::createSelect(_T("SELECT * FROM Win32_LogicalDisk WHERE DriveType = %d"), 3, NULL);

を実行した結果が、
SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3
になります。