أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية إزالة معلومات التسجيل الخاصة بالأجهزة التي سيتم عدم استخدامها مرة أخرى على جهاز كمبيوتر يقوم بتشغيل Windows Server 2003 أو إصدار لاحق

انتهي دعم Windows Server 2003 في 14 يوليو 2015!

أنهت شركة Microsoft دعم نظام التشغيل Windows Server 2003 في 14 يوليو 2015. لقد أثر هذا التغيير على تحديثات البرامج لديك وخيارات الأمان الخاصة بك. تعرف على ما يعنيه ذلك فيما يتعلق بك وكيفية الحفاظ على حمايتك.

هام: تمت ترجمة هذه المقالة باستخدام برامج مايكروسوفت للترجمة الآلية ومن المحتمل ان يتم تحريرها او تدقيقها بعد ذلك من خلال تكنولوجيا منصة مجموعات الترجمة(CTF) او من خلال مترجم بشري. تقدم لك شركة مايكروسوفت هذه المقالات المترجمة بشكل آلي او بالترجمة البشرية او بعد تحريرها وتدقيقها من قبل مجموعات الترجمة حتى تمكنكم من الوصول إلى جميع المقالات الموجودة في قواعد المعرفة لديها بلغات مختلفة. إلا أن المقالات المترجمة قد تحتوي على أخطاء في المفردات او بناء الجمل او النحو. وعليه، فإن شركة مايكروسوفت ليست مسؤولة عن اية أخطاء او عدم دقة في الترجمة او أية أضرار قد تحدث نتيجة أخطاء في ترجمة محتويات النص او استخدامه من قبل العملاء.

اضغط هنا لرابط المقالة باللغة الانجليزية934234
مقدمة حول
على جهاز كمبيوتر يقوم بتشغيل Windows Server 2003 أو إصدار أحدث من Windows، قد تكون متصلاً جهاز تخزين متصل عبر قناة ليفية أو عبر بروتوكول iSCSI لفترة وجيزة. عند توصيل جهاز تخزين، يقوم Windows بإنشاء معلومات التسجيل الخاصة بالجهاز. مع مرور الوقت، قد يحتوي التسجيل على العديد من الإدخالات للأجهزة التي سيتم عدم استخدامها مرة أخرى. توضح هذه المقالة كيفية إزالة هذه المعلومات من تسجيل النظام.
معلومات أخرى
عند جهاز جديد متصلاً بكمبيوتر، يسجل Windows معلومات حول الجهاز في تسجيل النظام. لمعظم الأجهزة هذا الإجراء لا يشكل مشكلة. على الرغم من ذلك، بعد تقديم جهاز تخزين بواسطة رقم وحدة منطقي (LUN) عبر قناة ليفية أو عبر بروتوكول iSCSI، الجهاز قد لا تواجهها مرة أخرى الكمبيوتر. على سبيل المثال، قد يمكن تعريف جهاز برقم تسلسلي أو بصفحات SCSI 0x80 و 0x83.

في هذه الحالة، قد يحتوي التسجيل على إدخالات للأجهزة التي قد لا تظهر مرة أخرى. ليس فقط القيام بهذه الإدخالات حيزاً في التسجيل، يؤدي هذه الإدخالات مشكلات تشغيلية في نهاية المطاف. على سبيل المثال، نظراً لاستخدام فهارس لوظيفة التوصيل والتشغيل قيم أربعة أرقام عشرية، قد تحدث مشكلة عند توصيل الجهاز 10,001.

لحل هذا القيد في وظيفة التوصيل والتشغيل، قد تحتاج إلى إزالة معلومات الجهاز من السجل عندما يكون الجهاز محرك الأقراص الثابتة الذي لم يعد موجوداً. يمكنك القيام بذلك باستخدام مايكروسوفت ديفنوديكلين الأداة المساعدة.

كيفية بناء على Windows Server 2003 أو Windows Server 2008، نظام التشغيل Windows Server 2008 R2 أو Visual Studio 2005

لمسح السجل ل GUID_DEVCLASS_DISKDRIVE القرص الفئة GUID GUID_DEVCLASS_VOLUME القرص فئة المعرف الفريد العمومي، اتبع الخطوات التالية.

ملاحظةونحن ننصح باستخدام ديفنوديكلينأداة مساعدة لهذه المهمة. يتم توفير مثال التعليمات البرمجية في الخطوة 7 والخطوات التالية لأغراض إعلامية فقط.
  1. استدعاء دالة سيتوبديجيتكلاسديفس للحصول على معلومات لفئة المقترن بالمعرف الفريد العمومي.
  2. استدعاء دالة سيتوبدينومديفيسينفو للحصول على معلومات مثيل لكل جهاز في الفئة الحالية.
  3. استدعاء دالة CM_Get_DevNode_Status لمعرفة ما إذا كانت معلومات الجهاز الحالي يمثل جهاز مفقود. تحديد ما إذا كانت حالة الدالة يساوي CR_NO_SUCH_DEVINST أو CR_NO_SUCH_VALUE.
  4. بشكل اختياري، لغياب جهاز استدعاء دالة CM_Get_Device_ID للحصول على معرف مثيل الجهاز وعرض المعرف قبل إزالة المعلومات.
  5. الجهاز غير موجود، استخدم معلومات الفئة الذي حصلت عليه في الخطوة 1 والمعلومات المثيل الذي حصلت عليه في الخطوة 2. استدعاء دالة سيتوبديكالكلاسينستالير (DIF_REMOVE،...) لإزالة المعلومات من التسجيل.
  6. عند التعامل مع كافة الأجهزة في فئة الحالية، استدعاء دالة سيتوبديديسترويديفيسينفوليست لتنظيف.
ملاحظة في بعض وحدات السيناريو، قد يلزم تنظيف السجل ليس فقط ل GUID_DEVCLASS_DISKDRIVE و GUID_DEVCLASS_VOLUME الأقراص الفئة Guid بل أيضا للأقراص GUID_DEVCLASS_SCSIADAPTER و GUID_DEVCLASS_VOLUMESNAPSHOT الفئة Guid. للقيام بذلك، يجب تغيير تعريف ديسككلاسيستوكلين في نموذج التعليمات البرمجية التالية.

تطبيق وحدة تحكم Win32 التالية مثالاً لتطبيق مسح السجل. لاستخدام هذا التطبيق، اتبع هذه الخطوات.

تقدم Microsoft الأمثلة البرمجية للتوضيح فقط، دون أي ضمان سواء ضمنياً أم صريحا. هذا يتضمن دون الحصر، الضمانات الضمنية الخاصة بالتسويق أو الملاءمة لغرض معين. تفترض هذه المقالة أنك معتاد على لغة البرمجة التي يتم شرحها والأدوات المستخدمة لإنشاء الإجراءات وتصحيحها. يساعد مهندسو الدعم لدى Microsoft شرح وظيفة إجراء محدد. ومع ذلك، لن يقوموا بتعديل هذه الأمثلة لتقديم وظيفة إضافية أو إنشاء إجراءات تستوفي متطلبات محددة.
  1. في Microsoft Visual Studio 2005، انقر فوق جديد في القائمة ملف ، ومن ثم انقر فوق المشروع.
  2. توسيع Visual c + +، ومن ثم انقر فوق Win32.
  3. تطبيق وحدة تحكم Win32، انقر فوق نوع تنظيف في نص اسم مربع ومن ثم انقر فوق موافق.
  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 و 2012 Studio مرئية

لإنشاء Windows Server 2012 و Microsoft Visual Studio 2012، اتبع الخطوات التالية.

ملاحظةونحن ننصح باستخدامديفنوديكلينأداة مساعدة لهذه المهمة. يتم توفير مثال التعليمات البرمجية في الخطوة 7 والخطوات التالية لأغراض إعلامية فقط.
  1. في Microsoft Visual Studio 2012، وانقر فوق جديد في القائمة ملف ، ومن ثم انقر فوق المشروع.
  2. في مربع الحوار " مشروع جديد "، اكتب تنظيف في اسم الحقل، ومن ثم انقر نقراً مزدوجاً فوق مشروع Win32.
  3. في معالج التطبيق Win32، انقر فوق " التالي".
  4. ضمن نوع التطبيق، انقر فوق لتحديد <b00> </b00>"تطبيق وحدة تحكم"، ثم انقر فوق إنهاء.
  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. انقر فوق موافق مرتين.
  13. بناء المشروع.

iSCSI LUN win2003

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 934234 - آخر مراجعة: 07/10/2014 16:17:00 - المراجعة: 4.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 KbMtar
تعليقات
yTagName("head")[0].appendChild(m);