2012-05-11 5 views
0

PCにインストールされているWindowsのバージョンを識別する必要のある、自立型のC++コード(Windowsプログラムではない)があります。Windows Serverとクライアントの帯域外プログラムによる識別

カーネルのバージョン(例:GetFileVersionInfo、ntoskrnl.exe)によって、さまざまなWindowsクライアントリリースを簡単に区別できますが、クライアントとサーバーのインストールを区別する信頼できる方法があるかどうかは疑問です。

この方法を使用してWindows Vista SP2とWindows Server 2008 SP2(両方とも6.0ビルド6002)とWindows 7とWindows Server 2008 R2(RTM用のビルド7600と6.1ビルド7601用)を区別すると問題が発生します。 SP2、両方)。 Win32 APIへのアクセスが利用できないため、レジストリを避けることは可能ですが、可能な限り確実なものは何ですか?クライアントとサーバーのOSを正しく識別する方法は、環境外で実行されるコードに対して正しく行われますか?

サーバ版のみのファイル(設定に関係なく、どのサーバ版でもインストールできることは保証されていますか?)を確認できます.Pantherフォルダをチェックしてください。保証があります)などですが、これは人々が以前に逃げ出した問題であると確信しています(うまくいけば)より優雅に解決されましたか?

:私は、あなたがバンドのチェックアウトについて何を意味するのか全くわからないんだけど(追記この質問はon SO beforeを尋ねてきたが、溶液(WMI)は、アウトオブバンドチェックするため適用できない)

+0

純粋な好奇心の中で、なぜこれを行う必要がありますか?私は何時間も熟考しており、ユースケースを考えることはできません。 –

+0

回復ソフトウェアの特定の機能をロックまたはロック解除することです。 –

答えて

0

一般にWindowsのServer Editionに関連付けられているsystem32ディレクトリ内のいくつかのバイナリを検索してしまいました。これは、サブシステム、依存関係、メモリ、親和性などに関する実行時の要件を指定するだけです。それはあまりクリーンではありませんが、実際にはとてもうまく動作します。

0

私はその時点でそれを無視するつもりです。

普通の方法はGetVersionExに電話し、OSVERSIONINFOEXwProductTypeのメンバーを見てください。

+0

私は私のポストで、「帯域外」とは私が* Windowsではなく、Windows APIにアクセスできないことを示しています。 'wProductType'を調べ、' ntoskrnl.exe'のPEヘッダから取得できるかどうか確認します。 –

+0

'GetVersionEx'がどこで' OSVERSIONINFOEX'を取得するのか知っていますか?私はntoskrnl.exeのPEオブジェクトヘッダーにそのどれも見つけることができません:http://pastebin.com/DTADp2EV –

+0

@ MahmoudAl-Qudsi:私はそれがレジストリからデータを取得すると確信しています。クライアントがサーバーのコピーであると思うようにレジストリを変更することによって、ワークステーションにサーバーのような動作をさせる(ハングする)バイナリファイル自体は、少なくとも同じものであった。それがもはや真実かどうかは分かりません(NT4/Win2Kの時間枠の周りに顕著になりました)。 –

0

PEイメージは、イメージがクライアントまたはサーバー上で動作するかどうかを指定しません。

+0

ありがとうございますが、それは私の質問に対する答えではありません。コメントとして投稿することを意味しましたか? –

+0

申し訳ありません、はい、これはコメントです。 :-) – mox

+0

あなたはあなたの答えの下にあるリンクをクリックしてコメントとして削除して再投稿することができます。そして、btw、PEヘッダーにはサブシステム情報が含まれており、依存関係情報はバイナリから取得できます。あなたはこのリンクのサブシステム情報を見ることができます:http://pastebin.com/DTADp2EV –

関連する問題