我想制作一个只能从已知的USB闪存驱动器运行的MFC应用程序。如果我们复制到另一个地方,就不应该运行它。 我在here找到了类似的问题 但我真的不明白。请给我一个提示。
答案 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());
}