0

私はWin環境が初めてで、WinカーネルAPIを使用するコードを記述しようとしていますが、Ubuntu 10.04では... mingw32(より具体的にはi586-mingw32msvc)を使用しています

私のコード:

#include<ddk/winddk.h>
int main()
{
        return 0;
}

しかし、ddk/winddk.h ヘッダーで多くのエラーが発生しています: Compiling as: i586-mingw32msvc-gcc WaitForSingleObj_2.c

すべてのエラーは次のようになります。

/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:9208: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'NTSTATUS'

私はこれに何か欠けていますか?ヘッダー iostream と windows.h でコンパイルしようとしたので、問題なく動作します。

編集:

#include<ntdef.h>
#include<ddk/ntddk.h>
#include<ddk/winddk.h>
#include<ddk/ntddndis.h>

int main()
{
        KTIMER *timer;
        KeInitializeTimer(timer);
        return 0;
}

KTIMERまでは問題ありませんが、新しいエラーが発生しました: /tmp/cc0epAQA.o:WaitForSingleObj_2.c:(.text+0x1d): `_ imp _KeInitializeTimer@4' への未定義の参照 collect2: ld が 1 つの終了ステータスを返しました

plzを含めるヘッダーファイルを教えてください。

編集:[他の人がすでにコメントしていて、私が経験したように(!)Windonwsカーネル開発に他のプラットフォームを使用しないようにしてください]

プロジェクト プロパティから追加のインクルード パスを指定して、Visual C++ Express に切り替え、WDK をダウンロードしました。 1\inc\api;)

しかし(私はこれが嫌いですが!)次のような多くのコンパイルエラーが発生しています

    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(543): error C2143: syntax error : missing ')' before 'const'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(543): error C2143: syntax error : missing '{' before 'const'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(543): error C2059: syntax error : ','
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(543): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(550): error C2143: syntax error : missing ')' before 'const'

私のコード:

#include <wdm.h>
int mian()
{
    /*
     * PKTIMER Timer;
     */
}

誰かがアイデアを持っているなら、助けてください!

4

2 に答える 2

3

ntdef.h明示的に、または特定の#define値が設定されていることによって、それが含まれていると確信していますか? それは定義するヘッダーでNTSTATUSあり、そのエラーメッセージは、gccシンボル/タイプが定義されていない場合に通常吐き出されるものです。

いずれにせよ、MS 以外のコンパイラを使用して Windows デバイス ドライバを開発すると、Microsoft 独自のツールチェーンを使用した場合よりも多くの問題が発生することはほぼ確実です。

于 2012-05-04T22:34:52.727 に答える
1

Dhara Darji、あなたはまだ私が前に書いたことをよく理解していません. 重要なのはツールチェーンだけではありません。私が指摘したように、ドライバーの認定を受けることはできません (ただし、ドライバーの認定を受けることはできますが、.cat相互署名を取得することもできます)。私はコメントのすべての言葉を支持します:

まあ、あなたはあなたのツールを知っているべきです。Windows での KM の開発 (他の多くのプラットフォームと同様) は、子供の遊びではありません。UM アプリがクラッシュすると、アプリは停止します。ドライバーがクラッシュすると、システムが停止します。サポートされていないツールを使用して Windows KM ドライバーを作成することを再検討してください。上記のコード スニペットからは、ドライバーに関するあなたの考えが存在しないように見えることは言うまでもありません。UM とはまったく異なるものであり、軽視すべきではありません。

main最後の試みでも、スペルミス(as )を除いて、ドライバーが呼び出されたエントリポイントを必要とすること、およびこれがクラシックとは完全に異なるパラメーターを取ることmianを知らないようです。DriverEntrymain

前に指摘したように、ユーザー モード (UM) とカーネル モード (KM) の概念が混在しています。これは単に機能しません。ifs と buts はありません。数年前、人々は、C++ は KM コードを書くのに適した言語ではないとさえ主張しました。主にのセマンティクスのためnewまた、ページ プールと非ページ プールでの影響。最近では、型チェックに C++ が受け入れられています。次に「プール」がありますが、これは何ですか? 少なくとも Windows の内部構造の基本を学ばなければなりません。残念ながら、少なくとも当時読んだ「Windows ???? Internals」の版では十分ではありませんでした。Oney の「Programming the Microsoft Windows Driver Model」などのドライバーに関する適切な本や、古いタイトルを含む多数の本を OSR の担当者から入手することをお勧めします。Windows 2000 では PnP システムのオーバーホールなどにより、少なくとも Windows 2000 用の何かが必要になる可能性が高いにもかかわらず、NT4 時代の非常に古い本でさえ、まだ多くの貴重な情報を含んでいます。

OSR は優れたオンライン リソースでもありますが、注意が必要です。彼らはコースを販売しており、それらのコースは優れています。当然のことながら、彼らはオンラインで入手可能なリソースですべての詳細を提供するわけではありません. 2005 年に 2 つのコースを受講するまで、ドライバー プログラミングについてある程度は知っていると思っていました。また、3 つのメーリング リストもホストしています。

ページ プールと非ページ プールの違い以外に、IRQL や、どの IRQL で何ができるかなどの概念を学ぶ必要があります。また、ほとんどの人はドライバーを「プログラム」と考えていますが、これは別の誤りです。この比較には欠点もありますが、DLL と比較することもできます。UM および KM のさまざまなプロセスからの多くのスレッドが要求でそれを叩いている可能性があるため、ドライバーがグローバル状態を維持することは困難です。そして、これらすべてが妥当な速度で実行されている必要があります。また、新しい VS 11 WDK の統合により、それが不要になったとしても、WinDbg などのツールを学習することもできます (VisualKD は、同じ問題に対する古いオプションです)。

KM で Windows UM プログラミング スキルを習得できると思われる場合は、もう一度考え直してください。私が想像できる最良のシナリオは、WDF の最新のドライバー モデルの 1 つを使用したためにドライバーが適切に作成されず、動作するということです。これにより、深い知識が必要な多くの作業が簡素化されます。しかし、それは確実に実行されますか? クラッシュするプログラムはプログラムをクラッシュさせるだけであると考える必要がありますが、クラッシュするドライバーは必然的に OS をクラッシュさせ、その影響は後で明らかになる可能性があります。PCが病院や原子力発電所でも使われていることを考えるとなおさらです。

最後にもう 1 つ注意してください。前に指摘したように、Visual Studio はまったく必要ありません。それがExpress版であろうと別のものであろうと。その理由は、WDK が OS (つまり Windows) 自体を構築するために使用される環境のサブセットであると報告されているためです。これは、Vim やお気に入りのエディターを使用してドライバーをビルドできることを意味します。結局のところ、WDK のビルド環境は にnmake基づいbuildており、その上に名前が付けられたアプリケーションがありsources、フォルダー内のファイルが make プロセスの中心的なファイルになります。WDK のサンプルを 1 つ見てみると、たくさんあります。しかし、何よりも RTFM (フレンドリーなマニュアルを読んでください)。特に、Windows NT4、2000、または XP の時代との比較がある場合、WDK のドキュメントは優れています。

于 2012-05-15T10:37:50.520 に答える