第22回 ファイル共有プロトコルSMB/CIFS(その3):基礎から学ぶWindowsネットワーク(2/3 ページ)
SMB/CIFSプロトコルのパケットの構造やコマンド・コードの詳細。Windowsネットワークのトラシューには必須の情報だ。
コマンド・コード一覧
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.