検索
連載

第22回 ファイル共有プロトコルSMB/CIFS(その3)基礎から学ぶWindowsネットワーク(2/3 ページ)

SMB/CIFSプロトコルのパケットの構造やコマンド・コードの詳細。Windowsネットワークのトラシューには必須の情報だ。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

コマンド・コード一覧

 SMB/CIFSプロトコルにおけるコマンドの一覧を次に示しておく。表中にある「Ver.」はプロトコルのバージョンを表し、どのダイアレクトで利用できるかを表している。

番号 コマンド名 Ver. 意味
0x00 SMB_COM_CREATE_DIRECTORY C フォルダの作成
0x01 SMB_COM_DELETE_DIRECTORY C フォルダの削除
0x02 SMB_COM_OPEN C ファイルのオープン
0x03 SMB_COM_CREATE C ファイルのオープン/作成
0x04 SMB_COM_CLOSE C ファイルのクローズ
0x05 SMB_COM_FLUSH C ファイルのフラッシュ
0x06 SMB_COM_DELETE C ファイルの削除
0x07 SMB_COM_RENAME C ファイルの名前変更
0x08 SMB_COM_QUERY_INFORMATION C ファイル情報の問い合わせ
0x09 SMB_COM_SET_INFORMATION C ファイル情報の設定
0x0a SMB_COM_READ C ファイルの読み出し
0x0b SMB_COM_WRITE C ファイルの書き込み
0x0c SMB_COM_LOCK_BYTE_RANGE C バイト範囲のロック
0x0d SMB_COM_UNLOCK_BYTE_RANGE C バイト範囲のアンロック
0x0e SMB_COM_CREATE_TEMPORARY 一時ファイルの作成
0x0f SMB_COM_CREATE_NEW C 新規ファイルの作成
0x10 SMB_COM_CHECK_DIRECTORY C フォルダの検査
0x11 SMB_COM_PROCESS_EXIT C 終了
0x12 SMB_COM_SEEK C シーク
0x13 SMB_COM_LOCK_AND_READ C+ ロックと読み出し
0x14 SMB_COM_WRITE_AND_UNLOCK C+ 書き込みとアンロック
0x1a SMB_COM_READ_RAW C+ ロー(直の)読み出し
0x1b SMB_COM_READ_MPX E マルチプレックス(多重化)読み出し
0x1c SMB_COM_READ_MPX_SECONDARY E マルチプレックス(多重化)読み出し(継続)
0x1d SMB_COM_WRITE_RAW C+ ロー書き込み
0x1e SMB_COM_WRITE_MPX E マルチプレックス(多重化)書き込み
0x20 SMB_COM_WRITE_COMPLETE E 書き込み完了
0x22 SMB_COM_SET_INFORMATION2 E 情報(属性)の設定
0x23 SMB_COM_QUERY_INFORMATION2 E 情報(属性)の取得
0x24 SMB_COM_LOCKING_ANDX E ロック(+後続コマンド)
0x25 SMB_COM_TRANSACTION E トランザクション
0x26 SMB_COM_TRANSACTION_SECONDARY E トランザクション(継続)
0x27 SMB_COM_IOCTL E IOCTL
0x28 SMB_COM_IOCTL_SECONDARY E IOCTL(継続)
0x29 SMB_COM_COPY E コピー
0x2a SMB_COM_MOVE E 移動
0x2b SMB_COM_ECHO E エコー
0x2c SMB_COM_WRITE_AND_CLOSE E 書き込みとクローズ
0x2d SMB_COM_OPEN_ANDX E オープン(+後続コマンド)
0x2e SMB_COM_READ_ANDX E 読み出し(+後続コマンド)
0x2f SMB_COM_WRITE_ANDX E 書き込み(+後続コマンド)
0x31 SMB_COM_CLOSE_AND_TREE_DISC E? クローズとツリー接続の解除
0x32 SMB_COM_TRANSACTION2 E2 トランザクション2
0x33 SMB_COM_TRANSACTION2_SECONDARY E2 トランザクション2(継続)
0x34 SMB_COM_FIND_CLOSE2 E2 クローズ2
0x35 SMB_COM_FIND_NOTIFY_CLOSE E2 通知とクローズ
0x70 SMB_COM_TREE_CONNECT C ツリー接続
0x71 SMB_COM_TREE_DISCONNECT C ツリー切断
0x72 SMB_COM_NEGOTIATE C プロトコル・バージョンのネゴシエーション
0x73 SMB_COM_SESSION_SETUP_ANDX E セッション・セットアップ(+後続コマンド)
0x74 SMB_COM_LOGOFF_ANDX E2 ログオフ(+後続コマンド)
0x75 SMB_COM_TREE_CONNECT_ANDX E ツリー接続(+後続コマンド)
0x80 SMB_COM_QUERY_INFORMATION_DISK C ディスク情報の取得
0x81 SMB_COM_SEARCH C 検索
0x82 SMB_COM_FIND E 検索
0x83 SMB_COM_FIND_UNIQUE E ユニーク検索
0xa0 SMB_COM_NT_TRANSACT E3 トランザクション
0xa1 SMB_COM_NT_TRANSACT_SECONDARY E3 トランザクション(継続)
0xa2 SMB_COM_NT_CREATE_ANDX E3 (+後続コマンド)
0xa4 SMB_COM_NT_CANCEL E3 キャンセル
0xa5 SMB_COM_NT_RENAME E3 名前変更
0xc0 SMB_COM_OPEN_PRINT_FILE C スプール・ファイルのオープン
0xc1 SMB_COM_WRITE_PRINT_FILE C スプール・ファイルへの書き込み
0xc2 SMB_COM_CLOSE_PRINT_FILE C スプール・ファイルのクローズ
0xc3 SMB_COM_GET_PRINT_QUEUE C スプール・ファイル情報の取得
SMB/CIFSプロトコルのコマンド(抜粋)

 この表のうち、「Ver.」欄はSMB/CIFSプロトコルのバージョン(ダイアレクト・バージョン)を表す。ダイアレクトについては、前回の「2.SMBプロトコルの概要(1)」を参照していただきたい。プロトコルのバージョンによっては利用できないコマンドもある。

Ver. 意味
C SMB/CIFSプロトコルの基本となる、最も初期から利用されている中核となるプロトコル(正式には「Core Protocol」と呼ばれている)。すべてのダイアレクトで利用可能
C+ 「MICROSOFT NETWORKS 1.03」ダイアレクトで利用可能な、拡張コア・プロトコル。「Core Plus Protocol」と呼ばれている
E 「MICROSOFT NETWORKS 3.0」か「LANMAN1.0」ダイアレクトで利用可能な、拡張LAN MANプロトコル。「Extended 1.0 Protocol」もしくは「LAN Manager 1.0」プロトコルと呼ばれている
E2 OS/2 LANMAN 2.0で利用可能な、LAN MAN 2.0プロトコル。「Extended 2.0 Protocol」もしくは「LAN Manager 2.0」プロトコルと呼ばれている。
E3 「NT LM 0.12」ダイアレクトで利用可能な、拡張LAN MANプロトコル。Windows NT以降のWindows OSで利用できる。
SMB/CIFSプロトコルのバージョン分類

 上記のコマンドのうちSMB_COM_TRANSACTION2は特別なコマンドであり、いくつかのサブコマンドを持っている。通常の処理では、1つのコマンドとそれに対する応答で処理が完結するが、このSMB_COM_TRANSACTION2では連続するコマンド/応答の組を使って、より多くの情報(データ)をやりとりすることができる。具体的にはファイルやフォルダ名の検索やファイル属性/セキュリティ属性の検索/設定などで、検索結果のファイルを1つずつやりとりしたり、ファイルごとの属性を順番にやりとりしたりするために利用される。具体的には次のようなサブコマンドが定義されている。

番号 コマンド名 意味
0x00 TRANS2_OPEN2 オープン2
0x01 TRANS2_FIND_FIRST2 最初の検索
0x02 TRANS2_FIND_NEXT2 次の検索
0x03 TRANS2_QUERY_FS_INFORMATION ファイル・システム情報の取得
0x05 TRANS2_QUERY_PATH_INFORMATION ファイル/ディレクトリ情報(属性)の取得
0x06 TRANS2_SET_PATH_INFORMATION ファイル/ディレクトリ情報(属性)の設定
0x07 TRANS2_QUERY_FILE_INFORMATION ファイル情報(属性)の取得
0x08 TRANS2_SET_FILE_INFORMATION ファイル情報(属性)の設定
0x09 TRANS2_FSCTL (Windows NT系OSでは未使用)
0x0A TRANS2_IOCTL2 (Windows NT系OSでは未使用)
0x0B TRANS2_FIND_NOTIFY_FIRST (Windows NT系OSでは未使用)
0x0C TRANS2_FIND_NOTIFY_NEXT (Windows NT系OSでは未使用)
0x0D TRANS2_CREATE_DIRECTORY 拡張属性付きディレクトリ作成
0x0E TRANS2_SESSION_SETUP セッション・セットアップ
0x10 TRANS2_GET_DFS_REFERRAL DFS情報の取得
0x11 TRANS2_REPORT_DFS_INCONSISTENCY DFSナレッジのチェック
SMB_COM_TRANSACTION2のサブコマンド

エラー・コード

 SMB/CIFSプロトコルのコマンド処理でエラーが発生した場合、サーバはクライアントに対して「エラー・クラス」と「エラー・コード」を返す。エラー・クラスは、エラーのおおまかな分類を表し、エラー・コードが実際のエラーの内容を表す。ただしクライアント側でエクスプローラやコマンド・プロンプトなどを使っている限りでは、どのエラー・クラスを意識することはなく、

クラス 意味
0x00 エラーなし
0x01 DOSエラー。SMB/CIFSクライアントのDOS/Windows OSにマッピングされるエラー
0x02 サーバ・エラー。SMB/CIFSプロトコルのサーバ側におけるエラー
0x03 ハード・エラー。CRCエラーやディスク・エラーなど、ハードウェアに起因するエラー
0xff コマンド・エラー。不正なSMB/CIFSパケットなど、コマンドやパラメータが不正な場合のエラー
エラー・クラス

 エラー・コードは、エラー・クラスごとに定義されている。以下のその抜粋を示しておく。

番号 エラー 意味
エラー・クラス=0x01(DOSエラー)
1 ERRbadfunc 無効なファンクション。サーバへのパラメータが間違っている場合などに発生
2 ERRbadfile 指定されたファイルが見つからない
3 ERRbadpath 指定されたディレクトリが見つからない
4 ERRnofids オープンしているファイルが多すぎ、ファイル・ハンドルが不足している
5 ERRnoaccess アクセスが拒否された。無効な名前変更や読み出しのみ可能なファイルへの書き込み、空でないディレクトリの削除などで発生する可能性がある
6 ERRbadfid 無効なファイル・ハンドル。指定されたファイル・ハンドルが正しくない場合などに発生
エラー・クラス=0x02(サーバ・エラー)
1 ERRerror サーバ側リソースの不足やサーバ内部のエラーなど、サーバ側の都合によるエラー全般
2 ERRbadpw パスワードが正しくない
4 ERRaccess アクセス権が不足している
5 ERRinvnid 指定されたTIDが不正
6 ERRinvnetname ツリー・コンテキスト中のネットワーク名が不正
7 ERRinvdevice デバイスが不正(非プリンタ・デバイスにプリント要求を送信するなど)
エラー・クラス=0x03(ハード・エラー)
19 ERRnowrite 書き込み保護されたメディアに書き込もうとしている
20 ERRbadunit 不明なユニット
21 ERRnotready デバイスの準備ができていない
22 ERRbadcmd 不明なコマンド
23 ERRdata CRCデータ・エラー
24 ERRbadreq 要求構造体のサイズが不正
エラー・コード(抜粋)

  

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る