NCB 構造体 (nb30.h)
[Netbios は、Windows Vista、Windows Server 2008、およびそれ以降のバージョンのオペレーティング システムではサポートされていません]
NCB 構造体は、ネットワーク制御ブロックを表します。 実行するコマンド、オプションのポスト ルーチン、オプションのイベント ハンドル、およびメッセージやその他のデータに使用されるバッファーへのポインターに関する情報が含まれています。 この構造体へのポインターが Netbios 関数に渡されます。
構文
typedef struct _NCB {
UCHAR ncb_command;
UCHAR ncb_retcode;
UCHAR ncb_lsn;
UCHAR ncb_num;
PUCHAR ncb_buffer;
WORD ncb_length;
UCHAR ncb_callname[NCBNAMSZ];
UCHAR ncb_name[NCBNAMSZ];
UCHAR ncb_rto;
UCHAR ncb_sto;
void()(_NCB *) * ncb_post;
UCHAR ncb_lana_num;
UCHAR ncb_cmd_cplt;
#if ...
UCHAR ncb_reserve[18];
#else
UCHAR ncb_reserve[10];
#endif
HANDLE ncb_event;
} NCB, *PNCB;
メンバー
ncb_command
NCB 構造体が非同期的に処理されるかどうかを示すコマンド コードとフラグを指定します。 最上位ビットには フラグが含まれています。 ASYNCH 定数が (OR 演算子を使用して) コマンド コードと組み合わされている場合、 NCB 構造体は非同期的に処理されます。 次のコマンド コードがサポートされています。
コード | 説明 |
---|---|
NCBACTION |
Windows Server 2003、Windows XP、Windows 2000、Windows NT: トランスポート インターフェイスの拡張機能を有効にします。 NCBACTION は TdiAction にマップされます。 このコードを指定すると、 ncb_buffer メンバーは、必要に応じてデータが続く ACTION_HEADER 構造体を格納するバッファーを指します。 NCBACTION コマンドは、NCBCANCEL を使用して取り消すことはできません。 NCBACTION は、標準の NetBIOS 3.0 コマンドではありません。 |
NCBADDGRNAME | ローカル名テーブルにグループ名を追加します。 この名前は、ネットワーク上の別のプロセスで一意の名前として使用することはできませんが、グループ名として誰でも追加できます。 |
NCBADDNAME | ローカル名テーブルに一意の名前を追加します。 TDI ドライバーは、名前がネットワーク全体で一意であることを確認します。 |
NCBASTAT | ローカル アダプターまたはリモート アダプターの状態を取得します。 このコードを指定すると、 ncb_buffer メンバーは、 ADAPTER_STATUS 構造体に格納されるバッファーを指し、その後に NAME_BUFFER 構造体の配列を指定します。 |
NCBCALL | 別の名前のセッションを開きます。 |
NCBCANCEL | 前の保留中のコマンドを取り消します。 |
NCBCHAINSEND | 指定したセッション パートナーに 2 つのデータ バッファーの内容を送信します。 |
NCBCHAINSENDNA | 指定したセッション パートナーに 2 つのデータ バッファーの内容を送信し、受信確認を待機しません。 |
NCBDELNAME | ローカル名テーブルから名前を削除します。 |
NCBDGRECV | 任意の名前からデータグラムを受信します。 |
NCBDGRECVBC | 任意の名前からブロードキャスト データグラムを受信します。 |
NCBDGSEND | 指定した名前にデータグラムを送信します。 |
NCBDGSENDBC | ローカル エリア ネットワーク (LAN) 上のすべてのホストにブロードキャスト データグラムを送信します。 |
NCBENUM |
Windows Server 2003、Windows XP、Windows 2000、Windows NT: LAN アダプター (LANA) 番号を列挙します。 このコードを指定すると、ncb_buffer メンバーは、LANA_ENUM構造体を格納するバッファーを指します。 NCBENUM は、標準の NetBIOS 3.0 コマンドではありません。 |
NCBFINDNAME | ネットワーク上の名前の場所を決定します。 このコードを指定すると、 ncb_buffer メンバーはバッファーを指し、その後に 1 つ以上 のFIND_NAME_BUFFER 構造体が続く FIND_NAME_HEADER 構造体で埋められます。 |
NCBHANGUP | 指定したセッションを閉じます。 |
NCBLANSTALERT |
Windows Server 2003、Windows XP、Windows 2000、Windows NT: 1 分以上続く LAN エラーをユーザーに通知します。 |
NCBLISTEN | セッションを別の名前 (ローカルまたはリモート) で開くことができます。 |
NCBRECV | 指定したセッション パートナーからデータを受信します。 |
NCBRECVANY | 指定した名前に対応する任意のセッションからデータを受信します。 |
NCBRESET |
LAN アダプターをリセットします。 アダプターは、 ncb_lana_num メンバー内の同じ番号を指定する他の NCB コマンドを受け入れる前にリセットする必要があります。
リソースを解放する方法を指定するには、次の値を使用します。
|
NCBSEND | 指定したセッション パートナーにデータを送信します。 |
NCBSENDNA | 指定したセッション パートナーにデータを送信し、受信確認を待機しません。 |
NCBSSTAT | セッションの状態を取得します。 この値を指定すると、 ncb_buffer メンバーは、 SESSION_HEADER 構造体を格納するバッファーを指し、その後に 1 つ以上の SESSION_BUFFER 構造体が続きます。 |
NCBTRACE |
NCB トレースをアクティブ化または非アクティブ化します。
このコマンドはサポートされていません。 |
NCBUNLINK |
アダプターのリンクを解除します。
このコマンドは、以前のバージョンの NetBIOS との互換性のために提供されています。 Windows には影響しません。 |
ncb_retcode
リターン コードを指定します。 この値は、非同期操作の進行中にNRC_PENDINGに設定されます。 システムは、次のいずれかの値を返します。
値 | 意味 |
---|---|
NRC_GOODRET | 操作が成功しました。 |
NRC_BUFLEN | 無効なバッファー長が指定されました。 |
NRC_ILLCMD | 無効なコマンドが指定されました。 |
NRC_CMDTMO | コマンドがタイムアウトしました。 |
NRC_INCOMP | メッセージが不完全でした。 アプリケーションは、別のコマンドを発行することです。 |
NRC_BADDR | バッファー アドレスが正しくありません。 |
NRC_SNUMOUT | セッション番号が範囲外でした。 |
NRC_NORES | 使用可能なリソースがありませんでした。 |
NRC_SCLOSED | セッションが閉じられました。 |
NRC_CMDCAN | コマンドが取り消されました。 |
NRC_DUPNAME | ローカル名テーブルに重複する名前が存在しました。 |
NRC_NAMTFUL | 名前テーブルがいっぱいでした。 |
NRC_ACTSES | コマンドは終了しました。名前にアクティブなセッションがあり、登録されなくなりました。 |
NRC_LOCTFUL | ローカル セッション テーブルがいっぱいでした。 |
NRC_REMTFUL | リモート セッション テーブルがいっぱいでした。 セッションを開く要求が拒否されました。 |
NRC_ILLNN | 無効な名前番号が指定されました。 |
NRC_NOCALL | 呼び出された名前がシステムで見つかりませんでした。 |
NRC_NOWILD | ncb_name メンバーではワイルドカードを使用できません。 |
NRC_INUSE | 名前はリモート アダプターで既に使用されています。 |
NRC_NAMERR | 名前が削除されました。 |
NRC_SABORT | セッションが異常終了しました。 |
NRC_NAMCONF | 名前の競合が検出されました。 |
NRC_IFBUSY | インターフェイスがビジー状態でした。 |
NRC_TOOMANY | 未処理のコマンドが多すぎます。アプリケーションは後でコマンドを再試行できます。 |
NRC_BRIDGE | ncb_lana_num メンバーは、有効なネットワーク番号を指定しませんでした。 |
NRC_CANOCCR | 取り消し操作の実行中にコマンドが完了しました。 |
NRC_CANCEL | NCBCANCEL コマンドが無効です。コマンドは取り消されませんでした。 |
NRC_DUPENV | 名前は別のローカル プロセスによって定義されました。 |
NRC_ENVNOTDEF | 環境が定義されていません。 reset コマンドを発行する必要があります。 |
NRC_OSRESNOTAV | オペレーティング システムのリソースが使い果たされました。 アプリケーションは、後でコマンドを再試行できます。 |
NRC_MAXAPPS | アプリケーションの最大数を超えました。 |
NRC_NOSAPS | NetBIOS で使用できるサービス アクセス ポイント (SAP) がありませんでした。 |
NRC_NORESOURCES | 要求されたリソースが使用できませんでした。 |
NRC_INVADDRESS | NCB アドレスが無効です。 |
NRC_INVDDID |
NCB DDID が無効です。
この戻りコードは IBM NetBIOS 3.0 仕様の一部ではなく、 NCB 構造体では返されません。 代わりに、 Netbios 関数によって返されます。 |
NRC_LOCKFAIL | ユーザー領域をロックできませんでした。 |
NRC_OPENERR | デバイス ドライバーによって実行されている開いている操作中にエラーが発生しました。 このエラー コードは、NetBIOS 3.0 仕様の一部ではありません。 |
NRC_SYSTEM | システム エラーが発生しました。 |
NRC_PENDING | 非同期操作はまだ完了していません。 |
ncb_lsn
ローカル セッション番号を識別します。 この番号は、環境内のセッションを一意に識別します。 この数値は、NCBCALL コマンドが正常に実行された後に Netbios 関数によって返されます。
ncb_num
ローカル ネットワーク名の番号を指定します。 この数値は、NCBADDNAME または NCBADDGRNAME コマンドが正常に実行された後に Netbios によって返されます。 名前ではなく、この番号は、すべてのデータグラム・コマンドおよび NCBRECVANY コマンドで使用する必要があります。
NAME_NUMBER_1の数値は常に0x01。 Netbios 関数は、残りの名前の0xFEに0x02範囲内の値を割り当てます。
ncb_buffer
メッセージ バッファーへのポインター。 バッファーには書き込みアクセス権が必要です。 その用途は次のとおりです。
コマンド | 目的 |
---|---|
NCBSEND | 送信するメッセージが含まれます。 |
NCBRECV | メッセージを受信します。 |
NCBSSTAT | 要求された状態情報を受信します。 |
ncb_length
メッセージ バッファーのサイズをバイト単位で指定します。 受信コマンドの場合、このメンバーは、受信したバイト数を示すために Netbios 関数によって設定されます。
バッファーの長さが正しくない場合、 Netbios 関数は NRC_BUFLEN エラー コードを返します。
ncb_callname[NCBNAMSZ]
リモート アプリケーションの名前を指定します。 文字列の長さを NCBNAMSZ に等しくするには、末尾のスペース文字を指定する必要があります。
ncb_name[NCBNAMSZ]
アプリケーションの既知の名前を指定します。 文字列の長さを NCBNAMSZ に等しくするには、末尾のスペース文字を指定する必要があります。
ncb_rto
セッションの受信操作のタイムアウト期間を 500 ミリ秒単位で指定します。 0 の値は、タイムアウトがないことを意味します。 NCBCALL または NCBLISTEN コマンドを使用して を指定します。 後続の NCBRECV コマンドに 影響します。
ncb_sto
セッションの送信操作のタイムアウト期間を 500 ミリ秒単位で指定します。 0 の値は、タイムアウトがないことを意味します。 NCBCALL または NCBLISTEN コマンドを使用して を指定します。 後続の NCBSEND コマンドと NCBCHAINSEND コマンドに 影響します。
ncb_post
非同期コマンドが完了したときに呼び出すポスト ルーチンのアドレスを指定します。 ポスト ルーチンは、次のように定義されます。
NCB_POST PostRoutine( PNCB pncb );
ここで、 pncb パラメーターは、完成した NCB 構造体へのポインターです。
ncb_lana_num
LAN アダプター番号を指定します。 この 0 から始まる番号は、特定の LAN アダプター ボードを使用する特定のトランスポート プロバイダーに対応します。
ncb_cmd_cplt
コマンド完了フラグを指定します。 この値は、 ncb_retcode メンバーと同じです。
ncb_reserve[18]
予約;は 0 である必要があります。
ncb_reserve配列の長さ X は、システム アーキテクチャによって異なります。 64 ビット システムの場合、配列には 18 個の要素が含まれます。 それ以外の場合、配列には 10 個の要素が含まれます。
ncb_reserve[10]
予約;は 0 である必要があります。
ncb_reserve配列の長さ X は、システム アーキテクチャによって異なります。 64 ビット システムの場合、配列には 18 個の要素が含まれます。 それ以外の場合、配列には 10 個の要素が含まれます。
ncb_event
非同期コマンドが受け入れられるときに非割り当て状態に設定され、非同期コマンドが完了したときにシグナル状態に設定されるイベント オブジェクトへのハンドルを指定します。 Netbios 関数が 0 以外の値を返すと、イベントが通知されます。 同期には手動リセット イベントのみを使用する必要があります。 指定したイベントは、複数のアクティブな非同期コマンドに関連付けないようにしてください。
ncb_command メンバーに ASYNCH フラグが設定されていない場合、または ncb_post が 0 以外の場合は、ncb_event メンバーは 0 である必要があります。 それ以外の場合、 Netbios は NRC_ILLCMD エラー コードを返します。
注釈
ncb_eventを使用して非同期要求を発行すると、ncb_postを使用する場合よりもシステム リソースが少なくて済みます。 さらに、 ncb_event が 0 以外の場合、要求が処理される前にスレッドが終了すると、保留中の要求は取り消されます。 これは、 ncb_postを使用して送信された非同期要求には当てはまりません。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
Header | nb30.h |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示