NetShareAdd 関数 (lmshare.h)

サーバー リソースを共有します。

構文

NET_API_STATUS NET_API_FUNCTION NetShareAdd(
  [in]  LMSTR   servername,
  [in]  DWORD   level,
  [in]  LPBYTE  buf,
  [out] LPDWORD parm_err
);

パラメーター

[in] servername

関数を実行するリモート サーバーの DNS または NetBIOS 名を指定する文字列へのポインター。 このパラメーターが NULL の場合は、ローカル コンピューターが使用されます。

[in] level

データの情報レベルを指定します。 このパラメーターには、次の値のいずれかを指定できます。

説明
2
リソースの名前、種類とアクセス許可、接続数など、共有リソースに関する情報を指定します。 buf パラメーターは、SHARE_INFO_2構造体を指します。
502
リソースの名前、種類とアクセス許可、接続の数、およびその他の関連情報など、共有リソースに関する情報を指定します。 buf パラメーターは、SHARE_INFO_502構造体を指します。
503
リソースの名前、種類とアクセス許可、接続の数、およびその他の関連情報など、共有リソースに関する情報を指定します。 buf パラメーターは、SHARE_INFO_503構造体を指します。

[in] buf

データを指定するバッファーへのポインター。 このデータの形式は、 level パラメーターの値によって異なります。 詳細については、「 ネットワーク管理関数バッファー」を参照してください。

[out] parm_err

ERROR_INVALID_PARAMETER エラーの原因となる共有情報構造体の最初のメンバーのインデックスを受け取る値へのポインター。 このパラメーターが NULL の場合、エラー時にインデックスは返されません。 詳細については、 NetShareSetInfo 関数に関するページを参照してください。

戻り値

関数が成功した場合、戻り値は NERR_Success

関数が失敗した場合、戻り値には次のいずれかのエラー コードを指定できます。

リターン コード 説明
ERROR_ACCESS_DENIED
ユーザーには、要求された情報へのアクセス権がありません。
ERROR_INVALID_LEVEL
level パラメーターに指定された値が無効です。
ERROR_INVALID_NAME
文字またはファイル・システム名が無効です。
ERROR_INVALID_PARAMETER
指定されたパラメーターが無効です。
NERR_DuplicateShare
共有名は、このサーバーで既に使用されています。
NERR_RedirectedPath
リダイレクトされたリソースに対して操作が無効です。 指定したデバイス名が共有リソースに割り当てられます。
NERR_UnknownDevDir
デバイスまたはディレクトリが存在しません。

解説

この関数は、サーバー メッセージ ブロック (SMB) 共有にのみ適用されます。 分散ファイル システム (DFS) や WebDAV 共有などの他の種類の共有では、すべての種類の共有をサポートする Windows ネットワーク (WNet) 関数を使用します。

管理者、システムオペレーター、または Power Users ローカル グループのメンバーのみが、 NetShareAdd 関数の呼び出しでファイル共有を追加できます。 印刷演算子は、プリンター共有を追加できます。

Active Directory のプログラミングを行っている場合は、特定の Active Directory サービス インターフェイス (ADSI) メソッドを呼び出して、ネットワーク管理共有関数を呼び出すことで実現できるのと同じ機能を実現できる場合があります。 詳細については、「 IADsFileShare」を参照してください。

level パラメーターに 503 を指定した場合、SHARE_INFO_503構造体の shi503_servername メンバーで指定されたリモート サーバーは、NetServerTransportAddEx 関数を使用してトランスポート プロトコルにバインドされている必要があります。 NetServerTransportAddEx の呼び出しでは、level パラメーターに 2 または 3 が指定されている必要があり、トランスポート プロトコルのSERVER_TRANSPORT_INFO_2構造体でSVTI2_SCOPED_NAME フラグが指定されている必要があります。

次のコード サンプルは、 NetShareAdd 関数の呼び出しを使用してネットワーク リソースを共有する方法を示しています。 このコード サンプルでは、 SHARE_INFO_2 構造体のメンバーを入力し、情報レベル 2 を指定して NetShareAdd を呼び出します。 これらのプラットフォームでは共有レベルのセキュリティがサポートされていないため、パスワードは必要ありません。

#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <stdio.h>
#include <lm.h>
#pragma comment(lib, "Netapi32.lib")

void wmain( int argc, TCHAR *argv[ ])
{
   NET_API_STATUS res;
   SHARE_INFO_2 p;
   DWORD parm_err = 0;

   if(argc<2)
      printf("Usage: NetShareAdd server\n");
   else
   {
      //
      // Fill in the SHARE_INFO_2 structure.
      //
      p.shi2_netname = TEXT("TESTSHARE");    
      p.shi2_type = STYPE_DISKTREE; // disk drive
      p.shi2_remark = TEXT("TESTSHARE to test NetShareAdd");
      p.shi2_permissions = 0;    
      p.shi2_max_uses = 4;
      p.shi2_current_uses = 0;    
      p.shi2_path = TEXT("C:\\");
      p.shi2_passwd = NULL; // no password
      //
      // Call the NetShareAdd function,
      //  specifying level 2.
      //
      res=NetShareAdd(argv[1], 2, (LPBYTE) &p, &parm_err);
      //
      // If the call succeeds, inform the user.
      //
      if(res==0)
         printf("Share created.\n");
      
      // Otherwise, print an error,
      //  and identify the parameter in error.
      //
      else
         printf("Error: %u\tparmerr=%u\n", res, parm_err);
   }
   return;
}

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー lmshare.h (include Lm.h)
Library Netapi32.lib
[DLL] Netapi32.dll

関連項目

NetServerTransportAddEx

NetShareDel

NetShareDelEx

NetShareSetInfo

ネットワーク管理機能

ネットワーク管理の概要

ネットワーク共有関数

SHARE_INFO_2

SHARE_INFO_502

SHARE_INFO_503