Hatena::Groupwindows

CX's Memo(Windows関連)

[Latest] [Edit] [Config] [Help] | [Group] [Home] [PV:788179]
2006 | 04 |
2009 | 05 | 06 | 09 |
2010 | 02 |

2010-02-03

Windowsコマンドプロンプト基礎文法最速マスター Windowsコマンドプロンプト基礎文法最速マスター - CX's Memo(Windows関連)  を含むブックマーク はてなブックマーク - Windowsコマンドプロンプト基礎文法最速マスター - CX's Memo(Windows関連)

Windowsコマンドプロンプトの文法一覧です。他の言語をある程度知っている人はこれを読めばコマンドプロンプトの基礎をマスターしてバッチファイルを書くことができるようになっています。簡易リファレンスとしても利用できます。

1. 基礎

メッセージ表示
ECHO Hello, world.
コメント

 コメントには「REM」(Remarks の略)を用いることが多いですが、「::」(本来はラベル)でもコメントの代用が可能です。ただし IF や FOR のブロック内では「::」はエラーになるので注意してください。

REM コメントその1
:: コメントその2
変数の宣言

 SET コマンドで変数(環境変数)の設定を行います。変数名と「=」の間は空白を入れず詰めて入力するようにしましょう(空白を含んだ変数名が設定されてしまう為)

SET 変数名=[文字列]
SET /A 変数名=[数式]

 変数を参照する場合は、%変数名% と「%」で囲む必要があります。

ECHO %変数名%
バッチファイルの実行

 バッチファイルを実行するにはコマンドラインで次のようにします。

script.bat [Enter]

 または

script.cmd [Enter]

 .bat(Windows バッチファイル)と .cmd(Windows コマンド スクリプト)の大きな違いはありません。

 スクリプトに同じ名前を付けた場合は .BAT が優先されます。優先順位は SET PATHEXT にて確認できます。

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

 出力結果をファイルに書き出すにはリダイレクトを使います。「>」は上書きで「>>」は追記になります。

script.bat > file.txt [Enter]

2. 数値

数値の表現

 SET コマンドの /A オプションを用いることで変数に数値を代入することができます。なお、代入できるのは整数(32bit 値)のみで、小数は代入できません。

SET /A num=-2147483647  … OK
SET /A num=0            … OK
SET /A num=123          … OK
SET /A num=2147483647   … OK
SET /A num=2147483648   … NG :「無効な数字です。数値は 32 ビットで表記される数値です。」
SET /A num=1.23         … NG :「演算子がありません。」

 数値は、16進数、8進数表記での設定も可能です。

SET /A num=0x12         … OK : 16進数(値は28)
SET /A num=022          … OK : 8進数(値は28)
SET /A num=09           … NG :「無効な数字です。数値定数は 10 進 (17 桁)、16 進 (0x11 桁)、または 8 進 (021 桁) です。」
四則演算

 四則演算です。

SET /A num=1+1     … 2
SET /A num=1-1     … 0
SET /A num=1*2     … 2
SET /A num=1/20 : 小数は切り捨て(商)
SET /A num=1/0     … NG : 0 除算エラーです。

 余りの求め方です。コマンドラインで実行する場合は「%」、バッチファイルで実行する場合は「%%」を指定します。

SET /A num=3%21(余り)
インクリメントとデクリメント

 インクリメントとデクリメントです

:: インクリメント
SET /A num+=1

:: デクリメント
SET /A num-=1

3. 文字列

文字列の表現

 文字列には引用符(ダブルクォーテーション等)を指定する必要はありません。また「=」の後の空白も文字列として処理されます。

SET str1=abc
SET str2=de f
SET str2= g hi
文字列操作

 文字列を結合する方法です。

:: 結合
SET str1=aaa
SET str2=bbb
SET str3=%str1%%str2%              … aaabbb

 配列に分割する機能はありません。

 文字列の長さを求めるコマンドはありませんが、以下のようなバッチファイルで代用可能です。結果は ERRORLEVEL にセットされます。

@ECHO OFF
REM File : GetLength.bat
REM Usage : GetLength.bat abcde
IF "%1"=="" GOTO :EOF
SET /A LENGTH=0
SET LAST=%1

:LOOP
SET /A LENGTH+=1
SET LAST=%LAST:~1%
IF NOT "%LAST%"=="" GOTO LOOP

EXIT /B %LENGTH%

 文字列から任意の位置の場所の文字を切り出す方法です。

:: 切り出し
SET str1=abcd
SET str2=%str1:~0,2%               … ab(1桁目(オフセット0)から2文字)

4. 配列

 配列はありません。

5. ハッシュ

 ハッシュ変数はありません。

6. 制御文

IF コマンド

 IF 文に相当します。1行に書く形式とブロック形式の構文が利用できます。

IF 条件 処理

 ブロック形式の IF 文には () を用います。

IF 条件 (
    処理
) ELSE (
    処理
)

 ただしブロック形式では以下のような書き方をするとエラーになるので注意してください。

<エラーになる例>
IF 条件 
(
    処理
) 
ELSE 
(
    処理
)

 条件の箇所には、以下のような条件を指定することができます。

IF [NOT] ERRORLEVEL 番号 コマンド
IF [NOT] 文字列1==文字列2 コマンド
IF [NOT] EXIST ファイル名 コマンド
IF 文字列1 比較演算子 文字列2 コマンド

 比較演算子は次のいずれかになります。

EQU - 等しい
NEQ - 等しくない
LSS - より小さい
LEQ - 以下
GTR - より大きい
GEQ - 以上
条件ループ

 WHILE 文はありませんが、GOTO コマンドと条件式を組み合わせることで代用可能です。

SET /A 変数=0

:LOOP

処理

IF "%変数%"=="終了値" GOTO END

SET /A 変数+=1

GOTO LOOP

:END
FOR コマンド

 FOR /L ~ が、他の言語の FOR 文に相当します。

 %変数には任意の単一文字(大文字、小文字は区別される)を指定可能ですが一般的には %i を用いることが多いようです。コマンドラインで実行する場合は「%変数」、バッチファイルで実行する場合は「%%変数」とします。

FOR /L %変数 IN (開始,増分,終了) DO コマンド [コマンドパラメータ]

<例>
FOR /L %i IN (1,1,3) DO @ECHO %i

<実行結果>
1
2
3

 また、以下の構文により他の言語の FOR EACH ~(配列やコレクションを参照する機能)と同様の使い方も可能です。

FOR %変数 IN (セット) DO コマンド [コマンドパラメータ]

<例>
FOR %i IN (aaa bbb ccc) DO @ECHO %i

<実行結果>
aaa
bbb
ccc

7. サブルーチン

 CALL コマンドでバッチファイルを呼び出すか、:ラベル名を指定します。引数は %1, %2, %3, ... としてセットされます。

 サブルーチンの戻り値は EXIT /B [終了コード] を指定することで ERRORLEVEL として返却可能です。

CALL :SUM 1, 2
ECHO %ERRORLEVEL%

GOTO END

:SUM
SET /A num1=%1
SET /A num2=%2
SET /A total=num1+num2

EXIT /B %total%

:END

8. ファイル入出力

 FOR コマンドの /F オプションを利用することでファイルを解析し読み込むことが可能です。

 以下のサンプルはファイルを1行ずつ読み込み出力ファイルに追記するサンプルです。コマンドラインで実行する場合は「%変数」、バッチファイルで実行する場合は「%%変数」とします。

FOR /F "tokens=*" %i IN (input.txt) DO ECHO %i>> output.txt

9. 知っておいたほうがよい文法

 バッチファイルでよく出てくる知っておいたほうがよい文法の一覧です。

ECHO OFF

 バッチファイル実行時は不要なメッセージを表示させないのが通例です(デバッグ時は除く)。

 以下の1行をバッチファイルの先頭に入れると以降のコマンドが画面上に表示されなくなります。

 コマンドの前に @ を付けることによって、そのコマンド自身もコマンドプロンプトに表示されなくなります。

@ECHO OFF
%~ 構文

 %~ 構文は %変数 を様々な情報に展開します。以下は %0 を %~ 構文に従って展開した例です。

ECHO %~0     … ファイル名    :[test]
ECHO %~f0    … フルパス      :[C:\home\edu\BAT\expand\test.bat]
ECHO %~d0    … ドライブ名    :[C:]
ECHO %~p0    … パス名のみ    :[\home\edu\BAT\expand\]
ECHO %~n0    … ファイル名    :[test](拡張子無し)
ECHO %~x0    … 拡張子        :[.bat]
ECHO %~s0    … 短い名前のみ  :[C:\home\edu\BAT\expand\test.bat]
ECHO %~a0    … ファイル属性  :[--a------]
ECHO %~t0    … ファイル日付  :[2010/02/05 00:45]
ECHO %~z0    … ファイルサイズ:[204]
ECHO %~dp0   … ファイルの場所:[C:\home\edu\BAT\expand\]
ECHO %~nx0   … ファイル名    :[test.bat](拡張子付き)
ECHO %~fs0   … 完全なパスと短い名前:[C:\home\edu\BAT\expand\test.bat]
ECHO %~ftza0 … 複合表示      :[--a------ 2010/02/05 00:45 204 C:\home\edu\BAT\expand\test.bat]

 例えば、バッチファイルのある場所に移動するには、以下のコマンドを実行します。

cd /d %~dp0

参考情報

その他の基礎文法マスター

この記事は他の基本文法マスターに便乗して書いた物です。誤り等ございましたらコメント等して頂けると助かります。

2009-09-05

[][] 「Windows 7 Enterprise 90 日間評価版」インストール  「Windows 7 Enterprise 90 日間評価版」インストール - CX's Memo(Windows関連)  を含むブックマーク はてなブックマーク -  「Windows 7 Enterprise 90 日間評価版」インストール - CX's Memo(Windows関連)

TechNet サイトより「Windows 7 Enterprise 90 日間評価版」がダウンロードできるようになったようです。

Windows 7 Enterprise 90 日間評価版

http://technet.microsoft.com/ja-jp/evalcenter/cc442495.aspx

さっそく「Virtual PC 2007」にてインストールしてみました。

■ ダウンロードの詳細 : Virtual PC 2007

http://www.microsoft.com/downloads/details.aspx?familyid=04D26402-3199-48A3-AFA2-2DC0B40A73B6&displaylang=ja

<仮想PC の作成方法>

1. Microsoft Visual PC を起動します。

2. 「新規」ボタンより「新しいバーチャル マシン ウィザード」を起動します。

3. 「新しいバーチャル マシン ウィザードの開始」とメッセージが表示されますので「次へ」を押します。

4. 「オプションの選択:(*) バーチャルマシンの作成」を選択し「次へ」を押します。

5. 「バーチャル マシンの名前と場所」に「Windows 7(評価版)」等、入力し「次へ」押します。

6. 「オペレーティングシステム:Windows Vista」を選択し「次へ」を押します。

7. 「このバーチャル マシンへの割り当て」にてメモリを割り当て「次へ」を押します。

  ※ 搭載メモリに余裕がある場合は「1024MB」にした方が良いでしょう。

8. 「バーチャル ハードディスク オプション:(*) 新しいバーチャル ハード ディスク」を選択し「次へ」を押します。

9. 「バーチャル ハードディスクの場所」にて「場所」と「サイズ」を指定し「次へ」を押します。

  ※ デフォルトで「65536 MB」(64GB)になってますが「16384 MB」(16GB)もあれば十分だと思います。

10. 「新しいバーチャル マシンのウィザードの完了」とメッセージが表示されるので「完了」を押します。

<仮想PC への Windows 7(評価版) のインストール方法>

1. Microsoft Visual PC を起動します。

2. 「Windows 7(評価版)」を選択し「起動」を押します。

3. メニューより [CD] - [ISO イメージのキャプチャ] を選択します。

4. 「キャプチャする CD イメージの選択」ダイアログより「Windows 7(評価版)」の *.iso ファイルを選択します。

  ※ 例:7600.16385.090713-1255_x86fre_enterprise_ja-jp_EVAL_Eval_Enterprise-GRMCENEVAL_JA_DVD.ISO

5. 仮想PC を再起動すると「Windows 7(評価版)」のインストールが開始されます。

  → メッセージに従いインストール作業を行います。

6. 「Windows 7(評価版)」のインストール後、[操作] - [バーチャル マシン追加機能のインストール/更新] にて追加機能をインストールします。

  → これをインストールすることで [ALT]+[Ctrl] を押すこと無くゲストOS/ホストOS 間をマウス移動できるようになります。

「プロダクト キー」はあらかじめ設定済みのようで、インストール時に聞かれることは無いようです。

インストールにかかる時間は環境に依存するとは思いますが 30 分くらいではないかと思います。

2009-06-14

[][] Windows の限界に挑戦!?  Windows の限界に挑戦!? - CX's Memo(Windows関連)  を含むブックマーク はてなブックマーク -  Windows の限界に挑戦!? - CX's Memo(Windows関連)

「人力検索」で以下の質問(というか調査)をしてみました。

question:1244362964

お使いの PC で「メモ帳(notepad.exe)」が何個起動できるか教えてください。一番、多く起動できた方に「いるか賞」を差し上げます。

※ 注:以下の作業を行うとシステムが不安定になる可能性があります。実行は自己責任でお願いします。


■ メモ帳の起動方法ならびに個数のカウント方法

1. コマンド プロンプト(cmd.exe)を起動します。

2. 指定回数 notepad.exe を起動します(以下は FOR 文を使用して 100 個連続で起動する例です。限界まで繰り返します。)

  FOR /L %i IN (1,1,100) DO ECHO %i 個目 & notepad.exe

3. 起動した notepad.exe の一覧を取得します。

  tasklist /FI "IMAGE eq notepad.exe" /NH > tasklist.txt

4. 起動した notepad.exe を終了させます。

  taskkill /F /FI "IMAGENAME eq notepad.exe"

5. tasklist.txt 内の notepad.exe 個数をカウントします。

  find /C "notepad.exe" tasklist.txt

  <実行結果(例)>

  TASKLIST.TXT: 933 … notepad.exe の個数


■ 回答例(実行環境, 実行結果を記入してください。)

OS : Windows Vista SP2(32-bit)

CPU : Core2 Quad Q9550 2.83GHz

Memory : 3GB

個数 : 933 個

備考 : 補足事項等(個数を増やすために行ったこと等)あれば記入してください

結果は以下の通り。

NoID OS SP32/64CPU GHz Memory起動個数
1pspet Windows XP SP332Core 2 Duo E84003 GHz 2 GB 150
3kn1967 Windows Me   32    700 MB 38
4rsc96074 Windows Vista SP232Core 2 Duo E45002.2 GHz2 GB 591
5QuestR2 Windows XP SP332Celeron 1.7 GHz1.5 GB 114
6K-Papansa Windows 7 RC   64Coire i7 920 2.6 GHz12 GB 1174
7dev_zer0 Windows XP Home SP332AMD Sempron 1.5 GHz256 MB 196
8hisam_k Windows Vista SP264Phenom X4 9150e 2 GHz 8 GB 923
9kazubokkuriWindows 7 RC   32Pentium D 935 3.2GHz 4 GB 500
10Tommi Windows XP Pro SP332Core 2 Duo E85003.8GHz 3.25 GB 134
   Windows 2000 ProSP432PeniumIII 1.0 GHz512 MB 203
11skv101 Windows XP Home SP332Celeron 1.8 GHz1.5 GB 176
   Windows 7   32Celeron 1.8 GHz1.5 GB 800

予想通りというか、やはり、64-bit OS が複数プロセスの起動に強いという結果になりました。

また、想定していた計算式は以下の通り。想定の範囲内の結果でしたので、計算式は、そんなに間違ってないのでは?と思います。

OS 32/64計算式(想定)起動個数(想定)
Windows 2000 32( 3072 KB - χ KB) / (512 bytes * 26) 223 個
Windows XP 32( 3072 KB - χ KB) / (512 bytes * 32) 181 個
Windows Vista32(12288 KB - χ KB) / (512 bytes * 32) 757 個
Windows Vista64(20480 KB - χ KB) / (512 bytes * 32) 1269 個
Windows 7 32(12288 KB - χ KB) / (512 bytes * 32) 757 個
Windows 7 64(20480 KB - χ KB) / (512 bytes * 32) 1269 個

計算式=(デスクトップ ヒープのサイズ - OS 起動時の消費サイズ) / メモ帳1個の消費サイズ

OS 起動時の消費サイズ=χ:164*1として計算

メモ帳1個の消費サイズ=512 bytes*2× User オブジェクト数*3

*1Windows 2000 の結果をベースに算出。他の OS では異なる可能性があります

*2Desktop Heap Monitor にて算出。実際と異なる可能性あり。

*3XP 以降は「ステータス バー」の追加等により User オブジェクト数が増えていると思われる

notepadnotepad2011/02/17 19:371058個のnotepadを起動できました
Windows XP SP3 32bit
Xeon 2.80GHz(HT on) 2.25GB RAM
デスクトップヒープは20480に設定

cx20cx202011/02/17 22:06notepad さん>
XP でも頑張れば(設定変更すれば)1000個越えできるんですね。情報ありがとうございます。
ちなみに、Windows Vista の初期のバージョンのデスクトップヒープは XP と同じく、3MB だったようです。

<参考情報>
■ USER オブジェクトと GDI オブジェクト – 第 1 部
http://technet.microsoft.com/ja-jp/windows/ff606443.aspx

> Windows Vista 32 ビットの最初のリリースでは、対話型のヒープ サイズは
> 以前の 32 ビット バージョンの Windows と同じで 3 MB でした。
> リリース後に、ヒープをときどき使い果たしてしまうユーザーがいることが
> 遠隔測定によってわかったので (おそらく、より多くのメモリを持つシステムで、
> より多くのアプリケーションを実行していたためだと思われますが)、SP1 では、
> このサイズが 12 MB に引き上げられました。

notepadnotepad2011/02/18 19:58画像をたくさん貼り付けた大きなWordファイルの編集で
Wordが落ちてしまうなどXPでも作業によってはヒープサイズが3MBでは
少なすぎると思うのですよね
もともと512MB以下のメモリがメーカーPCの標準だった時代だから
それでもよかったのかもしれませんけど
SP1でVistaがわりと安定するようになったのは
ヒープサイズのOS標準設定の拡大も大きかったと思います
これでも調子付いてIE8のタブを大量に開いてyoutubeなんか見たり
気の向くままにgoogle検索を繰り返していると
タブが開けなくなったりします
特殊なアプリケーションを使ってメモリの上限に達する場合より
クライアント数のリソース値による上限に達するほうが速いと
思われますからこの辺の知識はWindows上で作業するなら
持っていても損のない知識だと思います

notepadnotepad2011/02/18 20:09>これでも調子付いてIE8のタブを大量に開いてyoutubeなんか見たり
というのはVistaの標準設定である12 MBのデスクトップヒープです
蛇足ですいません

cx20cx202011/02/18 20:57>これでも調子付いてIE8のタブを大量に開いてyoutubeなんか見たり

タブが開けなくなる理由は、デスクトップヒープが原因のケースもあると思いますが、
多くは、プロセス毎のGDI オブジェクトの上限(10,000個)が原因な気がします。
GDI オブジェクトの上限に達しているかどうか?は
[タスクマネージャ] - [プロセス] - [表示] - [列の選択] - [GDI オブジェクト]
で確認できます。
ちなみに、Google Chrome だと、タブを沢山開いても、GDI オブジェクトをほとんど消費しないようです。

<参考情報>
■ はてブ閲覧時のリソース不足 - 人力検索はてな
http://q.hatena.ne.jp/1227957618
■ Windows の限界に挑む: USER オブジェクトと GDI オブジェクト – 第 2 部
http://technet.microsoft.com/ja-jp/windows/ff621348

notepadnotepad2011/02/19 15:45GDIProcessHandleQuotaとUSERProcessHandleQuotaをいじることで
上限を変更することができるようですね
taskmanagerで確認してみましたが
一番多くGDIオブジェクトを利用しているプロセスはexplorerでした(4141)
tab数46のIE8はもっとも多くGDIを消費しているプロセスで1525
ftp://www.ashisuto.co.jp/pub/sybase/TechNote/1019174.pdf
などを見ると15000程度でOSが不安定になるようであまり積極的にいじるべきではない
パラメータのようですね

cx20cx202011/02/20 08:02> などを見ると15000程度でOSが不安定になるようであまり積極的にいじるべきではない
> パラメータのようですね
ある種のOSの設計上の限界なんでしょうね・・・
セッションあたりのGDIオブジェクトの限界(各プロセスの合計)が65,535(0xFFFF)というのも
16bitのWindowsの仕様を引きずっているようですし。

> tab数46のIE8はもっとも多くGDIを消費しているプロセスで1525
1500個くらいであれば、まだ大丈夫そうな気がします。
Web ページの作りにもよると思いますが、昔、経験した事象ですと、
はてなブックマークで大量にブックマークされたページを表示すると
同様にGDIオブジェクトも消費(1アイコンに付き1個消費)してました。

<参考(GDIを大量消費するページ)>
■ はてなブックマーク - 東大で学んだ卒論の書き方★論文の書き方(ブックマーク数:7000件)
http://b.hatena.ne.jp/entry?mode=more&url=http://staff.aist.go.jp/toru-nakata/sotsuron.html

IE8 が手元に無いため、今、確認することができませんが、
IE9 RC 版だと、描画方法が改善されたらしく、GDI オブジェクトはそれほど消費しなくなっているようです。
(恐らく、描画方法が、GDI→DirectX になった為と思われます。)

<参考>
■ ASCII.jp:DirectXで進化したInternet Explorer 9を試してみた|あなたの知らないWindows
http://ascii.jp/elem/000/000/510/510714/index-2.html

LuellaLuella2012/02/16 05:16Cool! That's a cleevr way of looking at it!

2009-06-03

[][] AVG Anti-Virus Free Edition 8.5  AVG Anti-Virus Free Edition 8.5 - CX's Memo(Windows関連)  を含むブックマーク はてなブックマーク -  AVG Anti-Virus Free Edition 8.5 - CX's Memo(Windows関連)

ウィルス対策ソフトとして「AVG Anti-Virus Free Edition 8.5」を入れてみました。

■ 無料アンチウイルスソフト AVG Anti-Virus Free Edition 8.5 ダウンロード

http://www.avgjapan.com/avgfree80-dl.html

対応OS として

と、ありますが、Windows 7 RC1(x64) でも、問題なくインストール完了しました。

タスク マネージャー を見ると

  • 通常
イメージ名ユーザー名説明
avgnsa.exeSYSTEMAVG Network scanner Service
avgrsa.exeSYSTEMAVG Resident Shield Service
avgcsrva.exeSYSTEMAVG Scanning Core Module - Server Part
avgtray.exe *32cx20AVG Tray Monitor
avgwdsvc.exe *32SYSTEMAVG Watchdog Service
  • AVG 画面起動時
イメージ名ユーザー名説明
avgscana.execx20AVG Command-line Scanning Utility
avgnsa.exeSYSTEMAVG Network scanner Service
avgrsa.exeSYSTEMAVG Resident Shield Service
avgcsrva.exeSYSTEMAVG Scanning Core Module - Server Part
avgcsrva.execx20AVG Scanning Core Module - Server Part
avgtray.exe *32cx20AVG Tray Monitor
avgui.exe *32cx20AVG User Interface
avgwdsvc.exe *32SYSTEMAVG Watchdog Service

という感じで、GUI 部分は、32bit で、サービス本体は、64bit で動作しているようです。

2009-05-17

[] 「クラッシック [スタート] メニュー」が無い!?  「クラッシック [スタート] メニュー」が無い!? - CX's Memo(Windows関連)  を含むブックマーク はてなブックマーク -  「クラッシック [スタート] メニュー」が無い!? - CX's Memo(Windows関連)

Windows Vista までは「タスクバーと [スタート] メニューのプロパティ」にてスタイルを

  • [スタート] メニュー
  • クラシック [スタート] メニュー

のどちらかを選べていましたが、Windows 7 では「クラシック [スタート] メニュー」のオプションは無くなっているようです。

Windows 7でなにが変わるのか(スタート・メニュー編):ITpro

http://itpro.nikkeibp.co.jp/article/COLUMN/20090203/324144/

■ クラシック・タイプは選べない?

http://itpro.nikkeibp.co.jp/article/COLUMN/20090203/324144/?ST=win&P=2

慣れの問題かもしれませんが、今まで(Windows 95 の頃から)クラシック タイプのメニューを使用していたので、違和感がなかなか取れません。

(新しいタイプのスタートメニューだと階層化されたメニューが見づらい(特に名前が長い場合)のがネックな気がします。)

[] MSVCRT.DLL  MSVCRT.DLL - CX's Memo(Windows関連)  を含むブックマーク はてなブックマーク -  MSVCRT.DLL - CX's Memo(Windows関連)

Windows 7 になってシステム DLL の構成(依存関係)に変更が入っているようです。

<Windows Vista の DLL 依存関係>
[C:\Windows\System32\MSVCRT.DLL]
├[C:\Windows\system32\KERNEL32.DLL]
│├[C:\Windows\system32\NTDLL.DLL]
│└[C:\Windows\system32\NTDLL.DLL]
└[C:\Windows\system32\NTDLL.DLL]
<Windows 7 RC1 の DLL 依存関係>
[C:\windows\system32\MSVCRT.DLL]
├[C:\windows\system32\KERNELBASE.DLL]
│└[C:\windows\system32\NTDLL.DLL]
├[C:\windows\system32\NTDLL.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-CONSOLE-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-DATETIME-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-DEBUG-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-ERRORHANDLING-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-FIBERS-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-FILE-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-HANDLE-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-HEAP-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-INTERLOCKED-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-LOCALIZATION-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-LIBRARYLOADER-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-MEMORY-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-MISC-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-NAMEDPIPE-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-PROCESSENVIRONMENT-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-PROCESSTHREADS-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-PROFILE-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-STRING-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-SYNCH-L1-1-0.DLL]
├[C:\windows\system32\API-MS-WIN-CORE-SYSINFO-L1-1-0.DLL]
└[C:\windows\system32\API-MS-WIN-CORE-UTIL-L1-1-0.DLL]

と、思って、MS サイトを検索してみたら以下の情報が出てきました。

Windows アプリケーション品質 CookBook: アプリケーションの互換性、信頼性、パフォーマンスを高めるための開発者ガイド

http://msdn.microsoft.com/ja-jp/windows/dd459214.aspx

■ 17. 新しいバイナリ: リファクタリング

http://msdn.microsoft.com/ja-jp/windows/dd459214.aspx#17

  • 説明
    • 内部的なエンジニアリングの効率を高め、将来的な作業基盤をしっかりと整えておくために、新しい低レベルのバイナリへの機能の再配置を行いました。
    • このリファクタリングによって、将来の Windows 環境の総合的な "表面積" (ディスクやメモリ要件、サービス、攻撃にさらされる領域など) をより小さく抑えることが可能となります。
  • 具体的な影響や現象
    • 新しい低レベルのバイナリへ機能面の再配置を行いました。たとえば、kernel32.dll および advapi32.dll の機能は、kernelbase.dll に集約されます。
    • 今後、既存のバイナリは、呼び出しを直接処理するのではなく、低レベルの新しいバイナリに転送することになります。
    • 転送は静的に行う (エクスポート テーブルにリダイレクトが含まれるようにする) ことも、実行時に行う (Dll に新しいバイナリを呼び出すスタブ ルーチンを持たせる) こともできます。
  • 既存の機能に対する影響の解決策
    • 影響があるのは、ウイルス対策アプリケーションなど、メモリ内の kernel32.dll または advapi32.dll のエクスポート テーブルを参照する際に、何らかの推測を行うコードだけです。実装の深い部分ではなく、公開されている API を使用するようにしてください。
    • これは、リファクタリングによって、API の詳細な実装を覆い隠すように再配置されている1 つの例です。

どうやら、Kernel32.dll や Advapi32.dll が細分化されてるようです。