如何限制MFC应用程序仅从已知的USB闪存驱动器运行

时间:2012-05-03 06:27:53

标签: c++ mfc

我想制作一个只能从已知的USB闪存驱动器运行的MFC应用程序。如果我们复制到另一个地方,就不应该运行它。 我在here找到了类似的问题 但我真的不明白。请给我一个提示。

1 个答案:

答案 0 :(得分:2)

在MFC中:GetFileInformationByHandle

 BY_HANDLE_FILE_INFORMATION info;
DWORD dwSerialNumber = 0;

if(GetFileInformationByHandle(FileHandle, &info) != 0)
{
    dwSerialNumber = info.dwVolumeSerialNumber;
    swprintf(szTemp, L"The Volume Serial Number = %d", info.dwVolumeSerialNumber);
    MessageBox(NULL, szTemp, L"Success", MB_OK);
}
else
{
    swprintf(szTemp, L"GetFileInformationByHandle Error = %d", GetLastError());
    MessageBox(NULL, szTemp, L"Success", MB_OK);
}

在C#/ C ++。NET中: 使用WMI USB驱动器的内部序列号。

试试这些代码,如果没有序列号,那么有些USB闪存驱动器确实有它们,有些则没有。

//import the System.Management namespace at the top in your "using" statement. Then in a method, or on a button click:

ManagementObjectSearch theSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
foreach (ManagementObject currentObject in theSearcher.Get())
{
   ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'");
   MessageBox.Show(theSerialNumberObjectQuery["SerialNumber"].ToString());
}