クリスマスということで
2009/12/25 コメントを残す
まず自分に役立つ情報であることが重要。自分に役立てば、きっと他の人にも…。時には息抜きも必要です。
2009/12/25 コメントを残す
2009/12/25 コメントを残す
WMI は、普段、スクリプトで使うことがほとんどだと思いますが、C++ で使ってみようということで
コーディング方法を紹介します。VB でもなく、.NET でもなく、あえて C++ です…。
COM プログラミングなので、後処理(Release() を呼ぶのが面倒)を楽にするために、ATL のスマートポインタを使います。
今回の例は、WMI の Win32_OperatingSystem クラスを使って、コンピューター種別を調べてみようというシナリオです。
具体的には、Win32_OperatingSystem クラスの ProductType メンバーの値を参照して調べるというものです。
(一部、エラー処理を省いています)
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
HRESULT hRes;hRes = CoInitializeSecurity(NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
0);
if (SUCCEEDED(hRes))
{
CComPtr<IWbemLocator> pIWbemLocator = NULL;
CComPtr<IWbemServices> pWbemServices = NULL;hRes = pIWbemLocator.CoCreateInstance(CLSID_WbemAdministrativeLocator,
NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER);
if (SUCCEEDED(hRes))
{
CComBSTR bstrNamespace = (L"root\\cimv2");
hRes = pIWbemLocator->ConnectServer(
bstrNamespace,
NULL,
NULL,
NULL,
0,
NULL,
NULL,
&pWbemServices);CComBSTR strQuery = L"Select * from Win32_OperatingSystem";
CComBSTR strQL = L"WQL";
CComPtr<IEnumWbemClassObject> pEnumObject = NULL;hRes = pWbemServices->ExecQuery(strQL, strQuery, WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumObject);
ULONG uCount = 1, uReturned;
CComPtr<IWbemClassObject> pClassObject = NULL;hRes = pEnumObject->Reset();
hRes = pEnumObject->Next(WBEM_INFINITE, uCount, &pClassObject, &uReturned);CComVariant var;
CComBSTR strClassProp = L"ProductType";
hRes = pClassObject->Get(strClassProp, 0, &var, 0, 0);
switch (var.intVal)
{
case 1: printf("This Computer is Workstation.\n"); break;
case 2: printf("This Computer is Domain Controller.\n"); break;
case 3: printf("This Computer is Server.\n"); break;
default: printf("This Computer is UnKnown Type.\n"); break;
}
}
}CoUninitialize();
return 0;
}
C++ で WMI クラスを使う機会は少ないと思いますが、こんな方法で使うことができます。
他の WMI クラスも上記を参考にすれば、使えると思います。
こういうのを知ると、スクリプトって便利だなって思いますね。
ちなみにですが、WMI 開発の際に使えそうな便利ツールが Microsoft から提供されています。
なお、これらのツールは、Windows Vista/Windows 7 でも動きます。
2009/12/22 コメントを残す
Microsoft の Tech Filders に連載させて頂いてるコラムですが、第 2 回目が公開されました。
Windows 7 のマルチなタッチでエクスペリエンス
プログラミングについて記述していますので、よろしければ、ご覧ください。
前編ということは、後編もあります。お楽しみに。
いつもお世話になっている MS エバンジェリストの松崎さんにも紹介していただいちゃいました。
ありがとうございます。
[Info] Tech Fielders コラム/インタビュー 注目記事
本職が忙しくて、少し間が空いてしまいましたが、また、ペースを取り戻していきたいと思います。
2009/12/02 コメントを残す
以前の記事でも書いたのですが、Windows Vista 以降で、TCP/IP で使用する動的ポートの範囲が変更されています。
動的ポートは、ephemeral ports(エフェメラル ポート)という言い方もします。
これは、特定の用途で規定しておらず、一時的な通信のために、自由に使えるポートのことです。
HTTP や LDAP のようにポート番号が規定されているポートは、well-known port と呼びます。
IANA に従うと、Vista 以降が正しい使用方法になっています。
1024 ~ 49151 のポート番号は、予約制になっており、IANA に登録が必要になります。
ポートの種別 | ポート番号の範囲 | |
1 | well-known port | 0 ~ 1023 |
2 | registered port | 1024 ~ 49151 |
3 | ephemeral port | 49152 ~ 65535 |
なお、IANA で割り当てられているポート番号の一覧は、以下に記載されています。
ポート番号は正しく使いましょう。