トップ回答者
What causes '0xc0000018'?

質問
-
English:
What causes '0xc0000018'?
The OS of our server is Widows Server 2012 R2.We set task in Task Scheduler, that start cmd.exe every morning.
But cmd.exe fails to start once a month.
When cmd.exe fails to start,'0xc0000018' is displayed on 'Last Status' of Task Scheduler.Japanese:
'0xc0000018'というエラーは、何を原因として引き起こされるものでしょうか?
使用しているOSはWidows Server 2012 R2です。タスクスケジューラ機能にて、毎朝cmd.exeを起動させるタスクを設定しているのですが、
月に1回の頻度で、cmd.exeが起動失敗します。
その際、タスクスケジューラの「前回の実行結果」欄にて、0xc0000018というエラーコードが表示されます。
回答
-
「0xc0000018」で検索すると、
(1)そのアプリケーション自体の不良、またはインストール不完全。
(2)ウィルスやマルウエアの感染による影響。
等が示唆されます。この件については既に検証されましたか。- 回答としてマーク Fumika Yoshihashi 2016年10月28日 10:33
-
ご回答ありがとうございます。
'0xC0000018'(STATUS_CONFLICTING_ADDRESSES)の意味につきましては、同様の認識です。
0xC0000018 のエラーにつきましては、
同じエラーが発生するサンプルプログラムを CodeProject というサイトで見つけました。
上記サンプルプログラムをタスクスケジューラにて登録したところ、同じ事象が発生しました。そのサンプルプログラムは、固定ベースアドレスを指定した DLL
を読み込んだ場合にアドレス競合が発生するというものです。そのため、おそらくは、cmd.exe も同様の理由でエラーとなっていると考えています。
■0xC0000018 が発生するサンプルプログラム
http:// www .codeproject.com/Articles/9426/Need-for-Rebasing-a-DLL
■ /FIXED (固定ベース アドレス)
https:// msdn.microsoft.com/ja-jp/library/w368ysh2.aspx
> 解説
>
> オペレーティング システムに、指定されたベース アドレスにだけプログラムを読み込むように指示します。
> 指定したベース アドレスが使用できない場合、オペレーティング システムはファイルを読み込みません。
しかしながら、アドレスの競合を引き起こしているプログラムが何なのかを調べる方法がわからず、手詰まりな状況です。
何か、方法がございましたら、ご教授願います。- 回答としてマーク Fumika Yoshihashi 2016年10月28日 11:37
すべての返信
-
「0xc0000018」で検索すると、
(1)そのアプリケーション自体の不良、またはインストール不完全。
(2)ウィルスやマルウエアの感染による影響。
等が示唆されます。この件については既に検証されましたか。- 回答としてマーク Fumika Yoshihashi 2016年10月28日 10:33
-
0xC0000018 は NT Status Code であると考えられます。
NT Status Code は一般的にカーネル モード側で動作するドライバ等が扱う Error Code で、ユーザ モード側で扱う Win32 Error Code は NT Status Code 変換したものです。
(ただし NT Status Code と Win32 Error Code は、一対一の関係ではない。)
ちなみに下記サイト情報からだと、0xC0000018 は STATUS_CONFLICTING_ADDRESSES であり、この NT Status Code は ERROR_INVALID_ADDRESS (0x000001E7) の Win32 Error Code にマップされるようです。
--------------------------------------------------
//
// MessageId: STATUS_CONFLICTING_ADDRESSES
//
// MessageText:
//
// {Conflicting Address Range}
// The specified address range conflicts with the address space.
//
#define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS)0xC0000018L)2.3.1 NTSTATUS Values
https://msdn.microsoft.com/en-us/library/cc704588.aspxINFO: Mapping NT Status Error Codes to Win32 Error Codes
https://support.microsoft.com/en-us/kb/113996STATUS_CONFLICTING_ADDRESSES ERROR_INVALID_ADDRESS
-------------------------------------------------- -
フォーラム オペレーターの星 睦美です。Fumika Yoshihashi さん、投稿ありがとうございます。
フォーラムのユーザーからの返信があります。内容を確認いただいてお役にたちましたら、投稿者から[回答としてマーク] をお願いします。
TechNet ライブラリにタスクスケジューラーのトラブルシューティングの参考情報があります。
・Troubleshooting Task Scheduler - Applies To: Windows 7, Windows Server 2008 R2, Windows Server 2012, Windows Vista: (英語)
・タスク スケジューラのトラブルシューティング: (日本語)
フォーラム ユーザーからの返信とTechNet ライブラリの情報を参考にしていただいて、事象の解決にいたらない場合にはシステム管理者向けのTechNet フォーラムに調査した内容をもとに投稿いただければと思います。・TechNet フォーラム - Windows Server > Windows Server 2012:
・フォーラムのご利用方法(質問の投稿)について
フォーラム オペレーター 星 睦美 - MSDN Community Support
- 編集済み 星 睦美 2016年10月28日 8:16
-
中澤さん、ご回答ありがとうございます。
>(1)そのアプリケーション自体の不良、またはインストール不完全。
>(2)ウィルスやマルウエアの感染による影響。
>等が示唆されます。この件については既に検証されましたか。上記について検証しましたが、以下の理由により違うと考えています。
(1)起動失敗しているのがcmd.exe(OS標準搭載のプログラム)であるため、不良とは考えにくい。
(2)ウィルス対策ソフトにて検知されていないため、ウィルスやマルウェアの感染は考えにくい。
また、McAfee や Symantec のソフトウェアに起因して上記のエラーコードが発生するケースがあるようでしたので、
それらを疑いましたが、各メーカーのサポート技術情報に載っていたバージョンと異なっているため、
違う事象と考えています。■ MSサポート技術情報にあった 0xc0000018 が発生するケース
https:// support.microsoft.com/ja-jp/kb/3045999■ McAfee に起因してエラーが発生するケース
https:// support.symantec.com/en_US/article.TECH97280.html■ Symantec Endpoint Protection(SEP) に起因してエラーが発生するケース
https:// support.symantec.com/en_US/article.TECH97280.html
なお、0xC0000018 のエラーにつきましては、
同じエラーが発生するサンプルプログラムを CodeProject というサイトで見つけました。
上記サンプルプログラムをタスクスケジューラにて登録したところ、同じ事象が発生しました。そのサンプルプログラムは、固定ベースアドレスを指定した DLL
を読み込んだ場合にアドレス競合が発生するというものです。そのため、おそらくは、cmd.exe も同様の理由でエラーとなっていると考えています。
■0xC0000018 が発生するサンプルプログラム
http:// www .codeproject.com/Articles/9426/Need-for-Rebasing-a-DLL
■ /FIXED (固定ベース アドレス)
https:// msdn.microsoft.com/ja-jp/library/w368ysh2.aspx
> 解説
>
> オペレーティング システムに、指定されたベース アドレスにだけプログラムを読み込むように指示します。
> 指定したベース アドレスが使用できない場合、オペレーティング システムはファイルを読み込みません。
しかしながら、アドレスの競合を引き起こしているプログラムが何なのかを調べる方法がわからず、手詰まりな状況です。
何か、方法がございましたら、ご教授願います。- 編集済み Fumika Yoshihashi 2016年10月28日 11:32
-
ご回答ありがとうございます。
'0xC0000018'(STATUS_CONFLICTING_ADDRESSES)の意味につきましては、同様の認識です。
0xC0000018 のエラーにつきましては、
同じエラーが発生するサンプルプログラムを CodeProject というサイトで見つけました。
上記サンプルプログラムをタスクスケジューラにて登録したところ、同じ事象が発生しました。そのサンプルプログラムは、固定ベースアドレスを指定した DLL
を読み込んだ場合にアドレス競合が発生するというものです。そのため、おそらくは、cmd.exe も同様の理由でエラーとなっていると考えています。
■0xC0000018 が発生するサンプルプログラム
http:// www .codeproject.com/Articles/9426/Need-for-Rebasing-a-DLL
■ /FIXED (固定ベース アドレス)
https:// msdn.microsoft.com/ja-jp/library/w368ysh2.aspx
> 解説
>
> オペレーティング システムに、指定されたベース アドレスにだけプログラムを読み込むように指示します。
> 指定したベース アドレスが使用できない場合、オペレーティング システムはファイルを読み込みません。
しかしながら、アドレスの競合を引き起こしているプログラムが何なのかを調べる方法がわからず、手詰まりな状況です。
何か、方法がございましたら、ご教授願います。- 回答としてマーク Fumika Yoshihashi 2016年10月28日 11:37
-
> cmd.exe はホストプロセスであって、実際のエラーはホストプロセスから起動される子プロセスで起きているのでは?
> だとしたら、調べるべきは子プロセスであって、cmd. exe ではないのでは?ご指摘ありがとうございます。
タスクスケジューラのジョブの登録は、実際には、cmd.exe を直接呼び出すのではなく、
バッチファイルを登録しております。
バッチファイルは「NET START <ServiceName>」の1行のみとなっています。バッチファイルでは「EXIT /B <終了コード>」を記載していない為、
子プロセスでエラーがあっても「0」が返却されるものと思い込んでおりました。
その為、タスクスケジューラでエラーを返すのは、cmd.exe だと判断しておりました。しかしながら、テストしてみたところ「EXIT /B <終了コード>」の記載が無い場合、
最後に呼び出された子プロセスの戻り値が返却されていることが分かりました。
子プロセス(net.exe)の可能性も考慮したいと思います。
> アプリケーション ログに、エラーが記録されていませんか?残念ながら、ジョブ実行時のイベントログにはエラーは記録されておりませんでした。