看了一个Usb禁用,启用的程序,可是在VC中编译有下面的错误
c:\microsoft visual studio\vc98\include\setupapi.h(37) : error C2143: syntax error : missing ';' before '*'
c:\microsoft visual studio\vc98\include\setupapi.h(37) : error C2501: 'LPGUID' : missing storage-class or type specifiers
c:\microsoft visual studio\vc98\include\commctrl.h(26) : error C2146: syntax error : missing ';' before identifier 'HRESULT'
c:\microsoft visual studio\vc98\include\commctrl.h(26) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
错误怎么会出现在头文件中呢?究竟错在哪了?达人们帮忙看一下吧,谢谢源程序如下:
// 必要的头文件和要链接的LIB文件
#include <setupapi.h>
#include <shlwapi.h>
#pragma comment(lib, "setupapi.lib")
#pragma comment(lib, "shlwapi.lib") 
// device information set(我把它译为设备信息集)
HDEVINFO hDevInfo = NULL;// 出错信息
void FormatMSG(DWORD dwError, LPTSTR * lpszMsg)

 BOOL bOk = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, dwError,
    MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), (LPTSTR)lpszMsg, 0, NULL); if (!bOk)
 {
  HMODULE hDll = LoadLibraryEx(_T("netmsg.dll"),
     NULL,
     DONT_RESOLVE_DLL_REFERENCES);
  if (NULL != hDll)
  {
    FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | 
        FORMAT_MESSAGE_FROM_SYSTEM,
        hDll,
        dwError,
        MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED),
        (LPTSTR)lpszMsg,0, NULL);
    FreeLibrary(hDll);
  }
 }
}BOOL ChangeStatus(DWORD NewStatus, DWORD SelectedItem, HDEVINFO hDevInfo)
{
 LPTSTR lpszMsg = NULL;
 HCURSOR hCursor = NULL;
 try
 {
  SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
  SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};   hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));  // Get a handle to the Selected Item.
  if (!SetupDiEnumDeviceInfo(hDevInfo, SelectedItem, &DeviceInfoData))
  {
   FormatMSG(GetLastError(), &lpszMsg);
   throw lpszMsg;
  }  // Set the PropChangeParams structure.
  PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
  PropChangeParams.Scope = DICS_FLAG_GLOBAL;
  PropChangeParams.StateChange = NewStatus;  if (!SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER *)&PropChangeParams,
sizeof(PropChangeParams)))
  {
   FormatMSG(GetLastError(), &lpszMsg);
   throw lpszMsg;
  }  // Call the ClassInstaller and perform the change.
  if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&DeviceInfoData))
  {
   FormatMSG(GetLastError(), &lpszMsg);
   throw lpszMsg;
  }  SetCursor(hCursor); 
  return TRUE;
 }
 catch (TCHAR * pszError)
 {
  SetCursor(hCursor);
  ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
  if (NULL != lpszMsg)
  {
   LocalFree((HLOCAL)lpszMsg);
  } 
  return FALSE;
 } 
}// 这些设备的启用和禁用主要有此函数实现
// 参数说明,nStatus 可取3个值,-1 :啥也不做
// 0 禁用设备,1启用设备。
// nIndex用于控制是对光驱,软驱还是对USB启用或禁用
// 也是可取3个值,0 代表软驱,1 代表光驱
// 2 代表USB
// 譬如要对光驱实现禁用,可以这样调用此函数
// ControlDisk(0, 1);
BOOL ControlDisk(int nStatus, int nIndex)
{
 if (-1 == nStatus)
 { 
  return FALSE;
 }  LPTSTR lpszMsg = NULL;
 try
 {
  TCHAR * GUIDString = NULL;
  GUID guid;
  ZeroMemory(&guid, sizeof(GUID));
  switch(nIndex)
  {
   case 0: // 0 代表软驱
    GUIDString = _T("4D36E980-E325-11CE-BFC1-08002BE10318");
    UuidFromString((unsigned char *)GUIDString, &guid);
    break; 
   case 1: // 1 代表光驱 
    GUIDString = _T("4D36E965-E325-11CE-BFC1-08002BE10318");
    UuidFromString((unsigned char *)GUIDString, &guid);
    break;
   case 2: // 2 代表USB
    GUIDString = _T("36FC9E60-C465-11CF-8056-444553540000");
    UuidFromString((unsigned char *)GUIDString, &guid);
    break;
  }  hDevInfo = SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT);
  if (INVALID_HANDLE_VALUE == hDevInfo)
  {
   FormatMSG(GetLastError(), &lpszMsg);
   throw lpszMsg;
  }  DWORD i;
  SP_DEVINFO_DATA DeviceInfoData;
  ZeroMemory(&DeviceInfoData, sizeof(SP_DEVINFO_DATA));
  DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);  for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); ++i)
  {
   if (1 == nStatus)
   {
    StateChange(DICS_ENABLE, i, hDevInfo);
   }
   else if (0 == nStatus)
   {
    StateChange(DICS_DISABLE, i, hDevInfo);
   } 
  }  // 释放 device information set
  return SetupDiDestroyDeviceInfoList(hDevInfo);
 }
 catch (TCHAR * pszError)
 {
  ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
  if (NULL != lpszMsg)
  {
   LocalFree((HLOCAL)lpszMsg);
  } 
  return FALSE;
 }
 return FALSE;
}

解决方案 »

  1.   

    我自己觉得不对的都改了,可编译时头文件还是有错啊,疯了》》》》
    // 必要的头文件和要链接的LIB文件
    #include<iostream.h>
    #include<setupapi.h>
    #include<shlwapi.h>
    #pragma comment(lib, "setupapi.lib")
    #pragma comment(lib, "shlwapi.lib") 
    // device information set(我把它译为设备信息集)
    HDEVINFO hDevInfo = NULL;
    //出错信息
    void FormatMSG(DWORD dwError,LPTSTR *lpszMsg)
    {
    bool bOK=formatMessage(FORMAT_MESSAGE_FORM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,dwError,MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),(LPTSTR)lpszMsg,0,NULL);
    if(!bOK)
    {
    HMODULE hDll=LoadLibraryEx(_T("netmsg.dll"),NULL,DONT_RESOLVE_DLL_REFERENCES);
    if(hDll=NULL)
    {
    FormatMessage(FORMAT_MESSAGE_FORM_HMODULE|FORMAT_MESSAGE_FROM_SYSTEM,hDll,dwError,MAKELANGID(LAN_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),(LPTSTR)lpszMsg,0,NULL);
    FreeLibrary(hDll);
    }
    }
    }bool ChangeStatus(DWORD NewStatus,DWORD SelectedItem,HDEVINFO hDevInfo)
    {
    LPTSTR lpszMsg=NULL;
    HCURSOR hCursor=NULL;
    try
    {
    SP_PROPCHANGE_PARAMS PropChangeParams={sizeof(SP_CLASSINSTALL_HEADER)};
    SP_DEVINFO_DATA DeviceInfoData={sizeof(SP-DEVINFO_DATA)};
    hCursor=SetCursor(LoadCursor(NULL,IDC_WAIT));
    //GET A handle to the selected item
    if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    } //set the PropChangeParams structure
    PropChangeParams.ClassInstallHeader.InstallFunction=DIF_PROPERTYCHANGE;
    PropChangeParams.Scope=DICS_FLAG_GLOBAL;
    PropChangeParams.StateChange=NewStatus;
    if(!SetupDiSetClassInstallParams(hDevInfo,&DeviceInfoData,(SP_CLASSINSTALL_HEADER*)&PropChangeParams,sizeof(PropChangeParas)))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    //call the ClassInstaller and perform the change
    if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&DevInfoData))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    SetCursor(hCursor);
    return TRUE;
    }
    catch(TCHAR *pszError)
    {
    SetCursor(hCursor);
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(lpszMsg!=NULL)
    {
    LocalFree(HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    }
    // 这些设备的启用和禁用主要有此函数实现
    // 参数说明,nStatus 可取3个值,-1 :啥也不做
    // 0 禁用设备,1启用设备。
    // nIndex用于控制是对光驱,软驱还是对USB启用或禁用
    // 也是可取3个值,0 代表软驱,1 代表光驱
    // 2 代表USB
    // 譬如要对光驱实现禁用,可以这样调用此函数
    // ControlDisk(0, 1);bool ControlDisk(int nState,int nIndex)
    {
    if(nStatus==-1)
    {
    return FALSE;
    }
    LPTSTR lpszMsg=NULL;
    try
    {
    TCHAR *GUIDString=NULL;
    GUID guid;
    ZeroMemory(&guid,sizeof(GUID));
    switch(nIndex)
    {
    case 0://0代表软驱

    break;
    case 1://1代表光驱
    break;
    case 2://2代表USB
    GUIDString=_T("36FC9E60-C465-11CF-8056-444553540000")
    GuidFormString((unsigned char *)GUIDSsting,&guid)
    break;
    }
    hDevinfo=SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT);
    if(INVALID_HANDLE_VALUE==hDevinfo)
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    DWORD i;
    SP_DEVINFO_DATA DeviceInfoData;
    ZeroMemory(&DeviceInfoData,sizeof(SP_DEVINFO_DATA));
    DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA);for(i=0;SetupDiEnumDeviceInfo(hDevinfo,i,&DeviceInfoData);++i)
    {
    if(nStatus==1)
    {
    StateChange(DICS_ENABLE,i,hDevinfo);
    }
    else if(nStatus==0)
    {
    StateChange(DICS_DISABLE,i,hDevinfo);
    }
    }
    //释放device information set
    return SetupDiDeviceInfoList(hDevinfo);
    }
    catch(TCHAR *pszError)
    {
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(lpszMsg!=NULL)
    {
    LocalFree((HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    return FALSE;
    }
    void main()
    {
    ControlDisk(0,2);
    }
      

  2.   

    增加两个头文件,再改语法错误吧!
    #include<windows.h>
    #include<tchar.h>
      

  3.   

    我改完了的程序,可是还有错,哥哥们继续帮忙啊!!
    // 必要的头文件和要链接的LIB文件#include<windows.h>
    #include<tchar.h> 
    #include<objbase.h>
    #include <initguid.h>
    #include<setupapi.h>
    #include<shlwapi.h>#pragma comment(lib, "setupapi.lib")
    #pragma comment(lib, "shlwapi.lib") // device information set(我把它译为设备信息集)
    HDEVINFO hDevInfo = NULL;
    /*typedef struct _SP_PROPCHANGE_PARAMS {
        SP_CLASSINSTALL_HEADER ClassInstallHeader;
        DWORD StateChange;
        DWORD Scope;
        DWORD HwProfile;
    } SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;//*///出错信息void FormatMSG(DWORD dwError,LPTSTR *lpszMsg)
    {
    BOOL bOK=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|
    FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,dwError,
    MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
    (LPTSTR)lpszMsg,0,NULL);
    if(!bOK)
    {
    HMODULE hDll=LoadLibraryEx(_T("netmsg.dll"),NULL,DONT_RESOLVE_DLL_REFERENCES);
    if(hDll=NULL)
    {
    FormatMessage(FORMAT_MESSAGE_FROM_HMODULE|
    FORMAT_MESSAGE_FROM_SYSTEM,hDll,dwError,
    MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
    (LPTSTR)lpszMsg,0,NULL);
    FreeLibrary(hDll);
    }
    }
    }BOOL ChangeStatus(DWORD NewStatus,DWORD SelectedItem,HDEVINFO hDevInfo)
    {
    LPTSTR lpszMsg=NULL;
    HCURSOR hCursor=NULL;
    try
    {
    SP_PROPCHANGE_PARAMS PropChangeParams={sizeof(SP_CLASSINSTALL_HEADER)};
    SP_DEVINFO_DATA DeviceInfoData={sizeof(SP_DEVINFO_DATA)};
    hCursor=SetCursor(LoadCursor(NULL,IDC_WAIT));
    //GET A handle to the selected item
    if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    } //set the PropChangeParams structure
    PropChangeParams.ClassInstallHeader.InstallFunction=DIF_PROPERTYCHANGE;
    PropChangeParams.Scope=DICS_FLAG_GLOBAL;
    PropChangeParams.StateChange=NewStatus;
    if(!SetupDiSetClassInstallParams(hDevInfo,&DeviceInfoData,
    (SP_CLASSINSTALL_HEADER*)&PropChangeParams,
    sizeof(PropChangeParams)))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    //call the ClassInstaller and perform the change
    if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&DeviceInfoData))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    SetCursor(hCursor);
    return TRUE;
    }
    catch(TCHAR *pszError)
    {
    SetCursor(hCursor);
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(lpszMsg!=NULL)
    {
    LocalFree((HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    }
    // 这些设备的启用和禁用主要有此函数实现
    // 参数说明,nStatus 可取3个值,-1 :啥也不做
    // 0 禁用设备,1启用设备。
    // nIndex用于控制是对光驱,软驱还是对USB启用或禁用
    // 也是可取3个值,0 代表软驱,1 代表光驱
    // 2 代表USB
    // 譬如要对光驱实现禁用,可以这样调用此函数
    // ControlDisk(0, 1);BOOL ControlDisk(int nStatus,int nIndex)
    {
    if(nStatus==-1)
    {
    return FALSE;
    }
    LPTSTR lpszMsg=NULL;
    try
    {
    TCHAR *GUIDString=NULL;
    GUID guid;
    ZeroMemory(&guid,sizeof(GUID));
    switch(nIndex)
    {
    case 0://0代表软驱
    GUIDString=_T("4D36E980-E325-11CE-BFC1-08002BE10318");
    GuidFromString((unsigned char *)GUIDString,&guid);
    break;
    case 1://1代表光驱
    GUIDString=_T("4D36E965-E325-11CE-BFC1-08002BE10318");
    GuidFromString((unsigned char *)GUIDString,&guid);
    break;
    case 2://2代表USB
    GUIDString=_T("36FC9E60-C465-11CF-8056-444553540000");
    GuidFromString((unsigned char *)GUIDString,&guid);
    break;
    }
    hDevInfo=SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT);
    if(INVALID_HANDLE_VALUE==hDevInfo)
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    DWORD i;SP_DEVINFO_DATA DeviceInfoData;
    ZeroMemory(&DeviceInfoData,sizeof(SP_DEVINFO_DATA));
    DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA);for(i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);++i)
    {
    if(nStatus==1)
    {
    StateChange(DICS_ENABLE,i,hDevInfo);
    }
    else if(nStatus==0)
    {
    StateChange(DICS_DISABLE,i,hDevInfo);
    }
    }
    //释放device information set
    return SetupDiDestroyDeviceInfoList(hDevInfo);
    }
    catch(TCHAR *pszError)
    {
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(lpszMsg!=NULL)
    {
    LocalFree((HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    return FALSE;
    }
    void main()
    {
    ControlDisk(0,2);
    }
      

  4.   

    又改了一次,中国只有一个错误了,StateChange没有声明,它应该怎么声明啊?
    // 必要的头文件和要链接的LIB文件#include<windows.h>
    #include<tchar.h> 
    #include<objbase.h>
    #include <initguid.h>
    #include<setupapi.h>
    #include<shlwapi.h>#pragma comment(lib, "setupapi.lib")
    #pragma comment(lib, "shlwapi.lib") // device information set(我把它译为设备信息集)
    HDEVINFO hDevInfo = NULL;
    /*typedef struct _SP_PROPCHANGE_PARAMS {
        SP_CLASSINSTALL_HEADER ClassInstallHeader;
        DWORD StateChange;
        DWORD Scope;
        DWORD HwProfile;
    } SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;//*///出错信息void FormatMSG(DWORD dwError,LPTSTR *lpszMsg)
    {
    BOOL bOK=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|
    FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,dwError,
    MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
    (LPTSTR)lpszMsg,0,NULL);
    if(!bOK)
    {
    HMODULE hDll=LoadLibraryEx(_T("netmsg.dll"),NULL,DONT_RESOLVE_DLL_REFERENCES);
    if(hDll=NULL)
    {
    FormatMessage(FORMAT_MESSAGE_FROM_HMODULE|
    FORMAT_MESSAGE_FROM_SYSTEM,hDll,dwError,
    MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
    (LPTSTR)lpszMsg,0,NULL);
    FreeLibrary(hDll);
    }
    }
    }BOOL ChangeStatus(DWORD NewStatus,DWORD SelectedItem,HDEVINFO hDevInfo)
    {
    LPTSTR lpszMsg=NULL;
    HCURSOR hCursor=NULL;
    try
    {
    SP_PROPCHANGE_PARAMS PropChangeParams={sizeof(SP_CLASSINSTALL_HEADER)};
    SP_DEVINFO_DATA DeviceInfoData={sizeof(SP_DEVINFO_DATA)};
    hCursor=SetCursor(LoadCursor(NULL,IDC_WAIT));
    //GET A handle to the selected item
    if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    } //set the PropChangeParams structure
    PropChangeParams.ClassInstallHeader.InstallFunction=DIF_PROPERTYCHANGE;
    PropChangeParams.Scope=DICS_FLAG_GLOBAL;
    PropChangeParams.StateChange=NewStatus;
    if(!SetupDiSetClassInstallParams(hDevInfo,&DeviceInfoData,
    (SP_CLASSINSTALL_HEADER*)&PropChangeParams,
    sizeof(PropChangeParams)))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    //call the ClassInstaller and perform the change
    if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&DeviceInfoData))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    SetCursor(hCursor);
    return TRUE;
    }
    catch(TCHAR *pszError)
    {
    SetCursor(hCursor);
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(lpszMsg!=NULL)
    {
    LocalFree((HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    }
    // 这些设备的启用和禁用主要有此函数实现
    // 参数说明,nStatus 可取3个值,-1 :啥也不做
    // 0 禁用设备,1启用设备。
    // nIndex用于控制是对光驱,软驱还是对USB启用或禁用
    // 也是可取3个值,0 代表软驱,1 代表光驱
    // 2 代表USB
    // 譬如要对光驱实现禁用,可以这样调用此函数
    // ControlDisk(0, 1);BOOL ControlDisk(int nStatus,int nIndex)
    {
    if(nStatus==-1)
    {
    return FALSE;
    }
    LPTSTR lpszMsg=NULL;
    try
    {
    TCHAR *GUIDString=NULL;
    GUID guid;
    ZeroMemory(&guid,sizeof(GUID));
    switch(nIndex)
    {
    case 0://0代表软驱
    GUIDString=_T("4D36E980-E325-11CE-BFC1-08002BE10318");
    UuidFromString((unsigned char *)GUIDString,&guid);
    break;
    case 1://1代表光驱
    GUIDString=_T("4D36E965-E325-11CE-BFC1-08002BE10318");
    UuidFromString((unsigned char *)GUIDString,&guid);
    break;
    case 2://2代表USB
    GUIDString=_T("36FC9E60-C465-11CF-8056-444553540000");
    UuidFromString((unsigned char *)GUIDString,&guid);
    break;
    }
    hDevInfo=SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT);
    if(INVALID_HANDLE_VALUE==hDevInfo)
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    DWORD i;SP_DEVINFO_DATA DeviceInfoData;
    ZeroMemory(&DeviceInfoData,sizeof(SP_DEVINFO_DATA));
    DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA);for(i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);++i)
    {
    if(nStatus==1)
    {
    StateChange(DICS_ENABLE,i,hDevInfo);
    }
    else if(nStatus==0)
    {
    StateChange(DICS_DISABLE,i,hDevInfo);
    }
    }
    //释放device information set
    return SetupDiDestroyDeviceInfoList(hDevInfo);
    }
    catch(TCHAR *pszError)
    {
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(lpszMsg!=NULL)
    {
    LocalFree((HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    return FALSE;
    }
    void main()
    {
    ControlDisk(0,2);
    }
      

  5.   

    这段代码是你写的吗?自己定义的函数名字都搞错??把 StateChange 改成 ChangeStatus
      

  6.   

    build时还有错,这个库文件在哪里找啊
    LINK : fatal error LNK1104: cannot open file "hid.lib"
    我从DDK中拷贝了一个,在工程-添加工程,中加了这个文件,也在工程-设置中,添加了可还是有错误。????怎么回事啊?
      

  7.   

    build时错误如下:--------------------Configuration: 01 - Win32 Debug--------------------
    Linking...
    01.obj : error LNK2001: unresolved external symbol __imp__UuidFromStringA@8
    Debug/01.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.01.exe - 2 error(s), 0 warning(s)
      

  8.   

    估计需要使用Platform SDK,vc98带的h和lib太老,去MS网站下载一个试试
      

  9.   

    谢谢大家了,又添加了一个库,程序可以运行了.不过程序不是我自己编的,
    哪位可以给解释一下它的实现原理啊,尤其是ChangeStatus这个函数
    多谢多谢