Как использовать RAPI.Invoke для вызова метода устройства winapi из приложения Desktop
Мне нужно получить Device Id из настольного приложения, где Device - это портативный терминал на базе Windows CE 5.0 и он подключен к ПК.
Получить эту информацию из приложения на устройстве легко, я могу использовать любой из методов GetDeviceUniqueID или KernelIoControl WinApi, например:
[DllImport("coredll.dll")]
private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,
int cbApplictionData,
int dwDeviceIDVersion,
[In, Out] byte[] deviceIDOuput,
out uint pcbDeviceIDOutput);
public byte[] GetDeviceID(string AppString)
{
// Call the GetDeviceUniqueID
byte[] AppData = Encoding.Unicode.GetBytes(AppString);
int appDataSize = AppData.Length;
byte[] DeviceOutput = new byte[20];
uint SizeOut = 20;
GetDeviceUniqueID(AppData, appDataSize, 1, DeviceOutput, out SizeOut);
return DeviceOutput;
}
Но мне нужно получить это из настольного приложения.
В Windows Mobile 5.X SDK есть образец для получения этого идентификатора из приложения Desktop. Так как я использую Windows CE, этот образец не дает идентификатор (это для Windows Mobile).
Я считаю, что можно использовать указанный метод из настольного приложения с помощью метода RAPI.Invoke() (или Opennetcf RAPI). Но я не могу понять, как использовать RAPI.Invoke с многопараметрическим методом WinApi, например, GetDeviceUniqueID.
У меня есть пример кода, также включены подписи C# метода WinApi в качестве комментария:
//[DllImport("coredll.dll")]
//private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,
// int cbApplictionData,
// int dwDeviceIDVersion,
// [In, Out] byte[] deviceIDOuput,
// out uint pcbDeviceIDOutput);
private void buttonGetDeviceID_Click(object sender, RoutedEventArgs e)
{
// RAPI
RAPI rapi = new RAPI();
rapi.Connect(true);
// How do I pass several parameters inside a byte[] ?
rapi.Invoke(@"\Windows\coredll.dll", "GetDeviceUniqueID", inputData, out outputData);
//Process outputData
}
Также здесь есть похожий вопрос, но он не дает никакого решения.