現在オフラインです。再接続するためにインターネットの接続を待っています

Windows Server 2003 またはそれ以降のバージョンを実行しているコンピューターで再び使用されることはありません、デバイスのレジストリ情報を削除する方法

Windows Server 2003 のサポートは 2015 年 7 月 14 日で終了しています

Windows Server 2003 のサポートは 2015 年 7 月 14 日で終了しています。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:934234
はじめに
Windows Server 2003 またはそれ以降のバージョンの Windows を実行しているコンピューターでわずかな時間だけをファイバー チャネルまたは iSCSI プロトコルを介して接続されているストレージ ・ デバイスを接続できます。ストレージ ・ デバイスが接続されている、ときに、デバイスのレジストリ情報が作成されます。時間の経過と共に、レジストリ再使用されることはありませんデバイスの多数のエントリがあります。この資料では、システム レジストリからこの情報を削除する方法について説明します。
詳細
Windows システム レジストリ内のデバイスに関する情報が記録は、コンピューターに新しいデバイスが接続されている場合。ほとんどのデバイスは、この手順は問題をもたらすことはありません。ただし、論理ユニット番号 (LUN) をファイバー チャネルまたは iSCSI ストレージ ・ デバイスの表示は、後にデバイスが絶対にもう一度コンピューターによって。たとえば、デバイスはシリアル番号または SCSI のページ 0x80 と 0x83 で識別可能性があります。

この場合、レジストリが再度表示されることはありませんが、デバイスのエントリがあります。だけでなくこれらのエントリは、レジストリ内の領域を占有、これらのエントリの運用上の問題が発生最終的にします。たとえば、プラグ アンド プレイ機能のインデックスは、4 桁の 10 進数の値を使用するため 10,001 のデバイスが接続されているときに問題が発生します。

プラグ アンド プレイ機能でこの制限を解決するのにはデバイスが、ハード ディスク ドライブが存在しないこと、デバイスの情報をレジストリから削除する場合があります。これを行うを使用して、 マイクロソフトの DevNodeClean ユーティリティです。

Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、および Visual Studio 2005年用にビルドする方法

GUID_DEVCLASS_DISKDRIVE ディスク クラス GUID のレジストリをクリーンアップして、GUID_DEVCLASS_VOLUME のクラス GUID をディスク、次の手順を実行します。

メモ 使用することをお勧めします DevNodeCleanこのタスクのためのユーティリティ。次の手順を実行し、手順 7 では、コード例は、参考情報としてのみ提供されます。
  1. GUID に関連付けられているクラスの情報を取得するには、 SetupDiGetClassDevs関数を呼び出します。
  2. 各デバイスは、現在のクラスのインスタンス情報を取得するには、 SetupDiEnumDeviceInfo関数を呼び出します。
  3. CM_Get_DevNode_Status関数を呼び出して、現在のデバイスの情報が存在しない場合、デバイスを表すかどうかを参照してください。関数のステータスが CR_NO_SUCH_DEVINST または CR_NO_SUCH_VALUE に等しいかどうかを確認します。
  4. 必要に応じて、存在しないデバイスの場合に、デバイス インスタンス ID を取得して、情報を削除する前に、ID を表示するCM_Get_Device_ID関数を呼び出します。
  5. 存在しないデバイスで手順 1 で取得したクラスの情報と手順 2 で取得したインスタンス情報を使用します。レジストリから情報を削除するには、 SetupDiCallClassInstaller (DIF_REMOVE、...)関数を呼び出します。
  6. 現在のクラス内のすべてのデバイスが処理されている場合をクリーンアップするには、 SetupDiDestroyDeviceInfoList関数を呼び出します。
メモ 一部のシナリオでは、だけではなくの GUID_DEVCLASS_DISKDRIVE と GUID_DEVCLASS_VOLUME ディスク guid も、GUID_DEVCLASS_SCSIADAPTER と GUID_DEVCLASS_VOLUMESNAPSHOT ディスクの guid のレジストリをクリーンアップする必要があります。次のサンプル コードでは、 DiskClassesToCleanの定義を変更する必要があります。

次の Win32 コンソール アプリケーションは、レジストリをクリーンアップするアプリケーションの例です。このアプリケーションを使用して、次の手順を実行します。

マイクロソフトは明示または暗示の保証もなしで、説明のためのプログラミングの例を提供します。これには、市場性または特定目的への適合性その他に対する暗黙的な保証についても含まれます。この資料は、例示されているプログラミング言語を作成したり、プロシージャをデバッグするために使用されるツールに精通しているユーザーを想定して作成されています。マイクロソフトのサポート エンジニアは、特定のプロシージャの機能についての説明をお手伝いすることができます。ただし、機能の追加、または個別案件への対応を目的としたプロシージャ作成のためにこれらの例を修正することはありません。
  1. Microsoft Visual Studio 2005 では、[ファイル] メニューの [新規] をクリックし、[プロジェクト] をクリックします。
  2. Visual C++を展開し、[ Win32] をクリックします。
  3. Win32 コンソール アプリケーション] をクリックしての種類 クリーンアップ名前テキスト ボックス、および [ OK] をクリックします。
  4. Win32 アプリケーション ウィザード] ダイアログ ボックスで [完了] をクリックします。
  5. ソリューション エクスプ ローラーで、ソース ファイルを展開するCleanup.cppを右クリックし、[コードの表示] をクリックします。
  6. 次のコードを探します。
    int _tmain(int argc, _TCHAR* argv[]){	return 0;}
  7. 次のコード手順 6 で見つけたコードを交換してください。
    /**************************************************************************************************/     /*                                                                                                */     /* Copyright (c) 2007 Microsoft Corporation.  All Rights Reserved                                 */     /*                                                                                                */     /**************************************************************************************************/     #pragma warning( disable : 4201 ) // nonstandard extension used : nameless strut/union#include <windows.h>#include <stdlib.h>#include <stdio.h>#include <stddef.h>#include <tchar.h>#include <setupapi.h>#include <cfgmgr32.h>#include <initguid.h>#include <devguid.h>#define SIZECHARS(x) (sizeof((x))/sizeof(TCHAR))#define arraysize(p) (sizeof(p)/sizeof((p)[0]))CONST GUID *DiskClassesToClean[2] = {    &GUID_DEVCLASS_DISKDRIVE,    &GUID_DEVCLASS_VOLUME};/**************************************************************************************************//*                                                                                                *//* The user must be member of Administrator group and must have backup and restore permissions         *//* (SE_BACKUP_NAME and SE_RESTORE_NAME). No check for these is performed in this example.              *//*                                                                                                *//**************************************************************************************************/int__cdeclmain(     IN int    ArgC,     IN char * pArgV[]    ){    HDEVINFO DeviceInfoSet;    SP_DEVINFO_DATA DeviceInfoData;    ULONG DevicesRemoved = 0,          i,          MemberIndex,          Status,           Problem,          ulClassesToCleanIdx;    BOOL bDoRemove = TRUE;    CONFIGRET cr;    TCHAR DeviceInstanceId[MAX_DEVICE_ID_LEN];    OSVERSIONINFO osvi;    const GUID ** ClassesToClean;    //    // Parse parameters.    //    for (i = 1; i < (ULONG)ArgC; i++) {        //        // Check for help.        //        if ( (lstrcmpi(pArgV[i], TEXT("-?")) == 0) ||                (lstrcmpi(pArgV[i], TEXT("/?")) == 0) ){            printf("\nCleanUp will remove phantom storage device nodes from this machine.\n\n");            printf("Usage:  CleanUp \n");            printf("\twhere /n displays but does not remove the phantom devnodes.\n");            printf("\nBackup and Restore privileges are required to run this utility.\n");            return 0;        }        //        // Check for -n, which means just list the devices that we would remove.        //        if ( (lstrcmpi(pArgV[i], TEXT("-n")) == 0) ||             (lstrcmpi(pArgV[i], TEXT("/n")) == 0) ) {            bDoRemove = FALSE;        }    }    //    // Run only on Windows XP/2003 (version 5.1) or later.    //    ZeroMemory(&osvi, sizeof(OSVERSIONINFO));    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);    if (!GetVersionEx(&osvi)) {        printf("CleanUp:  Unable to verify Windows version, exiting...\n");        return -1;    }    if ((osvi.dwMajorVersion == 5) &&        ((osvi.dwMinorVersion == 1) || (osvi.dwMinorVersion == 2))) {    }    else if (osvi.dwMajorVersion>=6) {    }    else    {        printf("CleanUp:  This utility is  designed to run on Windows XP/2003 and later\n");        return -1;    }    ClassesToClean = DiskClassesToClean;    ulClassesToCleanIdx = arraysize(DiskClassesToClean);    for (i=0; (i<ulClassesToCleanIdx) && (bDoRemove); i++) {        DeviceInfoSet = SetupDiGetClassDevs(ClassesToClean[i],                                            NULL,                                            NULL,                                            0                                            );        if (INVALID_HANDLE_VALUE!=DeviceInfoSet) {            DeviceInfoData.cbSize = sizeof(DeviceInfoData);            MemberIndex = 0;            while (SetupDiEnumDeviceInfo(DeviceInfoSet,                                         MemberIndex++,                                         &DeviceInfoData                                         )) {                //                // Determine whether this device is a phantom.                //                cr = CM_Get_DevNode_Status(&Status,                                           &Problem,                                           DeviceInfoData.DevInst,                                           0                                           );                if ((cr == CR_NO_SUCH_DEVINST) ||                    (cr == CR_NO_SUCH_VALUE)) {                    //                    // This is a phantom. Now get the DeviceInstanceId so we                    // can display this as output, then delete the phantom if requested.                    //                    if (CM_Get_Device_ID(DeviceInfoData.DevInst,                                         DeviceInstanceId,                                         SIZECHARS(DeviceInstanceId),                                         0) == CR_SUCCESS) {                        if (bDoRemove) {                            printf("DevNodePhantomCleaner:  %s will be removed.\n",                                   DeviceInstanceId);                            //                            // Call DIF_REMOVE to remove the device's hardware                            // and software registry keys.                            //                            if (SetupDiCallClassInstaller(DIF_REMOVE,                                                          DeviceInfoSet,                                                          &DeviceInfoData                                                          )) {                                DevicesRemoved++;                            } else {                                printf("CleanUp:  Error 0x%X removing phantom\n",                                       GetLastError);                            }                        } else {                            printf("CleanUp:  %s would have been removed.\n",                                   DeviceInstanceId);                        }                    }                }            }            SetupDiDestroyDeviceInfoList(DeviceInfoSet);        }    }    return DevicesRemoved;}
  8. [デバッグ] メニューをクリックし、[デバッグ開始] をクリックします。

Windows Server 2012 を Visual Studio 2012 を構築する方法

Windows Server 2012 および Microsoft Visual Studio 2012 のビルド、次の手順を実行します。

メモ 使用することをお勧めしますDevNodeCleanこのタスクのためのユーティリティ。次の手順を実行し、手順 7 では、コード例は、参考情報としてのみ提供されます。
  1. Microsoft Visual Studio 2012 では、[ファイル] メニューの [新規] をクリックし、[プロジェクト] をクリックします。
  2. [新しいプロジェクト] ダイアログ ボックスで、次のように入力します。 クリーンアップ名前のフィールドし、[ Win32 プロジェクト] をダブルクリックします。
  3. Win32 アプリケーション ウィザードで、のようにクリックします。
  4. [アプリケーションの種類] を選択する] をクリックして コンソール アプリケーション、し、[完了] をクリックします。
  5. ソリューション エクスプ ローラーで、ソース ファイルを展開するCleanup.cppを右クリックし、[コードの表示] をクリックします。
  6. 次のコードを探します。
    int _tmain(int argc, _TCHAR* argv[]){	return 0;}
  7. 次のコード手順 6 で見つけたコードを交換してください。
    //DevPhantomClnr.cpp : Defines the entry point for the console application.//  #include "stdafx.h"/**************************************************************************************************/     /*                                                                                                */     /* Copyright (c) 2007 Microsoft Corporation.  All Rights Reserved                                 */     /*                                                                                                */     /**************************************************************************************************/     #pragma warning( disable : 4201 ) // nonstandard extension used : nameless strut/union#include <windows.h>#include <stdlib.h>#include <stdio.h>#include <stddef.h>#include <tchar.h>#include <setupapi.h>#include <cfgmgr32.h>#include <initguid.h>#include <devguid.h>#define SIZECHARS(x) (sizeof((x))/sizeof(TCHAR))#define arraysize(p) (sizeof(p)/sizeof((p)[0]))CONST GUID *DiskClassesToClean[2] = {    &GUID_DEVCLASS_DISKDRIVE,    &GUID_DEVCLASS_VOLUME};/**************************************************************************************************//*                                                                                                *//* The user must be member of Administrator group and must have backup and restore permissions         *//* (SE_BACKUP_NAME and SE_RESTORE_NAME). No check for these is performed in this example.              *//*                                                                                                *//**************************************************************************************************/int__cdeclmain(     IN int    ArgC,     IN LPCWSTR pArgV[]    ){    HDEVINFO DeviceInfoSet;    SP_DEVINFO_DATA DeviceInfoData;    ULONG DevicesRemoved = 0,          i,          MemberIndex,          Status,           Problem,          ulClassesToCleanIdx;    BOOL bDoRemove = TRUE;    CONFIGRET cr;    TCHAR DeviceInstanceId[MAX_DEVICE_ID_LEN];    OSVERSIONINFO osvi;    const GUID ** ClassesToClean;    //    // Parse parameters.    //    for (i = 1; i < (ULONG)ArgC; i++) {        //        // Check for help.        //        if ( (lstrcmpi(pArgV[i], L"-?") == 0) ||                (lstrcmpi(pArgV[i], L"/?") == 0) ){            printf("\nDevNodePhantomCleaner will remove phantom storage device nodes from this machine.\n\n");            printf("Usage:  nDevNodePhantomCleaner \n");            printf("\tWhere /n displays but does not remove the phantom devnodes.\n");            printf("\nBackup and Restore privileges are required to run this utility.\n");            return 0;        }        //        // Check for -n, which means just list the devices that we would remove.        //        if ( (lstrcmpi(pArgV[i], L"-n") == 0) ||             (lstrcmpi(pArgV[i], L"/n") == 0) ) {            bDoRemove = FALSE;        }    }    //    // Run only on Windows XP/2003 (version 5.1) or later.    //    ZeroMemory(&osvi, sizeof(OSVERSIONINFO));    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);    if (!GetVersionEx(&osvi)) {        printf("DevNodePhantomCleaner:  Unable to verify Windows version, exiting...\n");        return -1;    }    if ((osvi.dwMajorVersion == 5) &&        ((osvi.dwMinorVersion == 1) || (osvi.dwMinorVersion == 2))) {        // 5.1 || 5.2    }    else if (osvi.dwMajorVersion>=6) {        //Nothing special on 6.x    }    else    {        printf("DevNodePhantomCleaner:  This utility is  designed to run on Windows XP/2003 and later\n");        return -1;    }    ClassesToClean = DiskClassesToClean;    ulClassesToCleanIdx = arraysize(DiskClassesToClean);    for (i=0; (i<ulClassesToCleanIdx) && (bDoRemove); i++) {        DeviceInfoSet = SetupDiGetClassDevs(ClassesToClean[i],                                            NULL,                                            NULL,                                            0                                            );        if (INVALID_HANDLE_VALUE!=DeviceInfoSet) {            DeviceInfoData.cbSize = sizeof(DeviceInfoData);            MemberIndex = 0;            while (SetupDiEnumDeviceInfo(DeviceInfoSet,                                         MemberIndex++,                                         &DeviceInfoData                                         )) {                //                // Determine whether this device is a phantom.                //                cr = CM_Get_DevNode_Status(&Status,                                           &Problem,                                           DeviceInfoData.DevInst,                                           0                                           );                if ((cr == CR_NO_SUCH_DEVINST) ||                    (cr == CR_NO_SUCH_VALUE)) {                    //                    // This is a phantom. Now get the DeviceInstanceId so we                    // can display this as output, then delete the phantom if requested.                    //                    if (CM_Get_Device_ID(DeviceInfoData.DevInst,                                         DeviceInstanceId,                                         SIZECHARS(DeviceInstanceId),                                         0) == CR_SUCCESS) {                        if (bDoRemove) {                            printf("DevNodePhantomCleaner:  %ws will be removed.\n",                                   DeviceInstanceId);                            //                            // Call DIF_REMOVE to remove the device's hardware                            // and software registry keys.                            //                            if (SetupDiCallClassInstaller(DIF_REMOVE,                                                          DeviceInfoSet,                                                          &DeviceInfoData                                                          )) {                                DevicesRemoved++;                            } else {                                printf("DevNodePhantomCleaner:  Error 0x%x removing phantom\n",                                       GetLastError());                            }                        } else {                            printf("DevNodePhantomCleaner:  %ws would have been removed.\n",                                   DeviceInstanceId);                        }                    }                }            }            SetupDiDestroyDeviceInfoList(DeviceInfoSet);        }    }    return DevicesRemoved;}
  8. ソリューション エクスプ ローラーでの [クリーンアップを右クリックし、[プロパティ] をクリックします。
  9. 構成プロパティを展開リンカーを展開し、[入力] をクリックします。
  10. 追加の依存ファイルを選択、下向きの矢印をクリックし、編集します。
  11. 依存関係の追加] ダイアログ ボックス、タイプsetupapi.libおよびcfgmgr32.lib
  12. [Ok]を 2 回クリックします。
  13. プロジェクトをビルドします。

iSCSI LUN win2003

警告: この記事は自動翻訳されています

プロパティ

文書番号:934234 - 最終更新日: 07/13/2014 17:12:00 - リビジョン: 6.0

Microsoft Windows Server 2003, Standard Edition (32-bit x86), Microsoft Windows Server 2003, Enterprise Edition (32-bit x86), Microsoft Windows Server 2003, Datacenter Edition (32-bit x86), Microsoft Windows Server 2003, Enterprise x64 Edition, Microsoft Windows Server 2003, Datacenter x64 Edition, Microsoft Windows Server 2003, Standard x64 Edition, Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems, Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems, Microsoft Windows Server 2003 R2 Standard Edition (32-bit x86), Microsoft Windows Server 2003 R2 Enterprise Edition (32-Bit x86), Microsoft Windows Server 2003 R2 Datacenter Edition (32-Bit x86), Microsoft Windows Server 2003 R2 Datacenter x64 Edition, Microsoft Windows Server 2003 R2 Enterprise x64 Edition, Microsoft Windows Server 2003 R2 Standard x64 Edition, Microsoft Windows Storage Server 2003 R2 x64 Enterprise, Microsoft Windows Storage Server 2003 R2 x64 Standard, Windows Server 2008 Datacenter, Windows Server 2008 Datacenter without Hyper-V, Windows Server 2008 Enterprise, Windows Server 2008 Enterprise without Hyper-V, Windows Server 2008 for Itanium-Based Systems, Windows Server 2008 Standard, Windows Server 2008 Standard without Hyper-V, Windows Server 2008 R2 Datacenter, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Standard, Windows Server 2012 Standard, Windows Server 2012 Datacenter

  • kboem kbcode kbinfo kbhowto kbmt KB934234 KbMtja
フィードバック
.appendChild(m);