无法在Windows Mobile 6上实现GetDeviceUniqueID

Old*_*oil 5 c# windows-mobile .net-3.5

我使用的代码非常类似于以下Stack Overflow问题: 在PInvoke DLL'coredll.dll'中找不到入口点'GetDeviceUniqueID'

(为了后人的缘故,我的代码粘贴在这里):

[DllImport("coredll.dll")]
private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,
                                            int cbApplictionData,
                                            int dwDeviceIDVersion,
                                            [In, Out] byte[] deviceIDOuput,
                                            out uint pcbDeviceIDOutput);



public static string GetDeviceID()
{
    string appString = "MyApp";
    byte[] appData = new byte[appString.Length];
    for (int count = 0; count < appString.Length; count++)
    {
        appData[count] = (byte)appString[count];
    }

    int appDataSize = appData.Length;
    byte[] DeviceOutput = new byte[20];
    uint SizeOut = 20;
    int i_rc = GetDeviceUniqueID(appData, appDataSize, 1, DeviceOutput, out SizeOut);

    string idString = "";
    for (int i = 0; i < DeviceOutput.Length; i++)
    {
        if (i == 4 || i == 6 || i == 8 || i == 10)
            idString = String.Format("{0}-{1}", idString, DeviceOutput[i].ToString("x2"));
        else
            idString = String.Format("{0}{1}", idString, DeviceOutput[i].ToString("x2"));
    }
    return idString;


}
Run Code Online (Sandbox Code Playgroud)

我在模拟器上编译程序部署到我的物理设备时没有问题.但是,此代码始终返回值:"00000000-0000-0000-0000-00000000000000000000".

(在内省时,i_rc有一个值2147024809).

出了什么问题?为什么函数似乎返回默认值/安全值?

Old*_*oil 5

原来app_data变量至少应该是8个字符.

(按照规定 - http://www.devlper.com/2008/10/getting-unique-device-id-using-getdeviceuniqueid-api/)

令人发狂,因为这套相当重要的要求似乎没有记录在任何地方.

奖金 - 我会列出其他要求,以防我们遗失上述网站的时间:

HRESULT GetDeviceUniqueID(LPBYTE pbApplicationData, DWORD cbApplictionData,
                          DWORD dwDeviceIDVersion, LPBYTE pbDeviceIDOutput,
                          DWORD *pcbDeviceIDOutput);
Run Code Online (Sandbox Code Playgroud)
  • pbApplicationData - 长度必须为8个字符,否则API将失败
  • dwDeviceIDVersion - 应该是1
  • pbDeviceIDOutput - out参数,将填充设备特定的唯一ID
  • pcbDeviceIDOutput - 长度 pbDeviceIDOutput