ネットワーク共有フォルダーにあるファイルへの書き込みしようとすると"ERROR_ACCESS_DENIED"エラーが発生します。

文書翻訳 文書翻訳
文書番号: 842792
重要です レジストリの変更に関する情報を掲載しています。レジストリを変更する前に、バックアップし、ことを確認してください、問題が発生した場合にレジストリを復元する方法を理解します。についてバックアップ、復元、およびレジストリを編集、次をクリックする方法について文書番号を使用して「サポート技術情報」資料を参照するには:
256986 Microsoft Windows レジストリの説明」
すべて展開する | すべて折りたたむ

目次

現象

呼び出しは、 WriteFile 関数が成功しない可能性があります。次の条件に該当する場合この現象が発生します。
  • Microsoft Windows XP を実行しているクライアント コンピューターを使用しています。サービス パック 1 (SP1)。
  • 使用して、 WriteFile 書き込みしようとする関数は、ネットワーク共有フォルダーにあるファイルです。
  • 実行しているサーバー コンピューター上の共有フォルダーのです。Microsoft Windows 2000 または Microsoft Windows Server 2003 のいずれか。
また、次のエラー メッセージが表示されます可能性があります。
ERROR_ACCESS_DENIED

原因

この問題は、次の条件に該当する場合に発生します。
  • 使用すると、 CreateFile 関数を作成するのにはファイルを指定した GENERIC_WRITE 定数だけで、 dwDesiredAccess パラメーターです。
  • サーバー メッセージ ブロック (SMB) の署名が有効になっています。クライアント コンピューターとサーバー コンピューター間の通信します。

回避策

この問題を回避するには、次のいずれかを使用してください。方法:
  • GENERIC_READ 定数と、GENERIC_WRITE を指定します。定数には、 dwDesiredAccess パラメーターです。
  • SMB 署名を変更します。

定数 GENERIC_READ、GENERIC_WRITE 定数には、dwDesiredAccess パラメーターで指定します。

次のコードを使用して、ファイルを作成します。

メモ 置換次のプレース ホルダー。
  • 交換、 サーバー名 サーバー コンピューターの名前のプレース ホルダーは、Windows 2000 または Windows Server 2003 が実行されています。
  • 置換は、 フォルダー名 ネットワーク上の共有フォルダーの名前のプレース ホルダーサーバーのコンピューター。
// Specify the GENERIC_READ constant and the GENERIC_WRITE constant
// in the dwDesiredAccess parameter when you create the file.
hFile = CreateFile("\\\\ServerName\\FolderName\\Test.txt", GENERIC_READ |
    GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

SMB 署名を変更します。

警告 レジストリ エディターを誤って使用すると、重大な可能性があります。オペレーティング システムを再インストールする必要があります問題。マイクロソフトレジストリの使用によって生じた問題を解決できることを保証できません。エディターが誤ってします。レジストリ エディターを使用して、自分でリスク。
サーバー コンピューターで、次の手順に従って、クライアント コンピューター:
  1. レジストリ エディターで、検索し、次レジストリ サブキー:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
  2. レジストリ エディターの右側のウィンドウで、右クリックします。requiresecuritysignature で、 名前 フィールド、し 変更.は、 [DWORD 値の編集ダイアログ ボックスが表示されます。
  3. で、 [値のデータ ボックスの種類0、し [OK].
  4. レジストリ エディターを終了し、コンピューターを再起動します。

詳細

現象の再現手順

  1. Windows XP SP1 を実行しているコンピューターでは、Microsoft を使用します。Visual C 6.0 は、簡単な Win32 コンソール アプリケーション プロジェクトを作成するのにはテストの名前。既定では、Test.cpp ファイルが作成されます。
  2. GENERIC_WRITE 定数しか指定することにより、ファイルを作成します。で、 dwDesiredAccess パラメーターを使用すると、 CreateFile 関数です。
  3. 使用して、WriteFile ファイルへの書き込みしようとする関数を指定します。これを行うには、交換、Test.cpp ファイルで既存のコードを次のコードします。

    メモ 置換次のプレース ホルダー。
    • 交換、 サーバー名 サーバー コンピューターの名前のプレース ホルダーは、Windows 2000 または Windows Server 2003 が実行されています。
    • 置換は、 フォルダー名 ネットワーク上の共有フォルダーの名前のプレース ホルダーサーバーのコンピューター。
    :
    #include "stdafx.h"
    #include "windows.h"
    #include "stdio.h"
    #include "conio.h"
    
    void main()
    {
        HANDLE hFile;
        char lpBuffer[99999];
        DWORD lpNumberOfBytesWritten;
    
        // Write data to the buffer that you will
        // you use to write data to the file.
        for (int i = 0; i < 100000; ++i)
            lpBuffer[i] = 'a';
    
        // Specify only the GENERIC_WRITE constant in the
        // dwDesiredAccess parameter when you create the file.
        hFile = CreateFile("\\\\ServerName\\FolderName\\Test.txt",
            GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    
        // Try to write the data in the buffer to the file.
        // If the call to the WriteFile function fails,
        // call the GetLastError function.
        if (!WriteFile(hFile, lpBuffer, 100000, &lpNumberOfBytesWritten, NULL))
    
            // If an ERROR_ACCESS_DENIED error has occurred, inform the user.
            if (GetLastError() == ERROR_ACCESS_DENIED)
            {
                printf("An ERROR_ACCESS_DENIED error has occurred.");
                printf("Press any key to continue.");
                getch();
            }
    
        // Close the handle to the file.
        CloseHandle(hFile);
    }
  4. ビルドして、アプリケーションを実行します。コンソール ウィンドウ表示されます。「現象」に記載されている現象が発生した場合は、[ コンソール ] ウィンドウには、次の出力が含まれます。
    ERROR_ACCESS_DENIED エラーが発生しました。
    いずれかのキーを押します。続行するには、[キー] をクリックします。

関連情報

詳細については、 CreateFile 関数とは WriteFile 機能、次のマイクロソフト開発ネットワーク (MSDN) の Web を参照してください。サイト:
CreateFile
http://msdn2.microsoft.com/en-us/library/aa363858.aspx
WriteFile
http://msdn2.microsoft.com/en-us/library/aa365747.aspx

プロパティ

文書番号: 842792 - 最終更新日: 2011年7月30日 - リビジョン: 3.0
キーワード:?
kberrmsg kbregistry kbkern32dll kbapi kbserver kbprb kbclient kbsmb kbmt KB842792 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:842792
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com