Cómo restringir la aplicación MFC para que se ejecute solo desde una unidad flash USB conocida

Quiero crear una aplicación MFC que solo pueda ejecutarse desde una unidad flash USB conocida. No debe ejecutarse si lo copiamos al otro lugar. Encontré una pregunta como esta en aquí Pero realmente no entiendo. Por favor, muéstrame una pista.

preguntado el 03 de mayo de 12 a las 07:05

Poner tal restricción en un programa me parece extraño. ¿Podríamos saber lo que está tratando de lograr? -

Estoy tratando de poner la aplicación en una unidad flash USB. Es como una aplicación plug and play. No es necesario instalar. Pero solo debe ejecutarse desde cierta unidad USB. Solo necesita proteger la copia de la aplicación desde el usb y ejecutarla en todas partes. -

@BoPersson, ¿copiaste el enlace incorrecto? Esa pregunta no es un duplicado en absoluto. -

1 Respuestas

En 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);
}

En C#/C++.NET: Use WMI el número de serie interno de una unidad USB.

Pruebe este código, si no hay un número de serie, es porque algunas unidades flash USB los tienen, otras no.

//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());
}

contestado el 03 de mayo de 12 a las 14:05

¿Cómo puedo obtener FileHandle? He intentado algo como esto. ` 'LPCSTR szBuf = "F:\\"; HANDLE FileHandle = CreateFile(szBuf, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);' Recibí el error 6.` - tpwynn

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.