#c# #c
#c# #c
Вопрос:
Привет, у меня есть следующий код, который я хотел бы преобразовать в C #. Не могли бы вы поделиться некоторыми сведениями о том, как я могу преобразовать их в C #? я не очень хорошо знаком с C . Особенно в функции, DeviceIoControl
которую он вызывает в WinBase API. Какую функцию в C # я должен использовать для замены DeviceIoControl?
shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
accessMode = GENERIC_READ | GENERIC_WRITE;
sprintf(ff, "\\.\%s", device);
hFile = CreateFile(ff, accessMode, shareMode, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE) {
*response = -1;
sprintf((response 1), "Failed to open device %s", device);
return;
}
status = DeviceIoControl(hFile,
IOCTL_SCSI_GET_ADDRESS,
NULL,
0,
inquiry_data,
sizeof(inquiry_data),
amp;returned,
FALSE);
Комментарии:
1. вместо того, чтобы пытаться напрямую перевести это, может быть, попробуйте воссоздать то, что он должен делать?
2. Спасибо за ответ. Но я бы предпочел преобразовать вместо воссоздания, поскольку я не очень хорошо знаком с общим потоком программы.
Ответ №1:
Вы должны использовать взаимодействие P / Invoke для доступа к DeviceIoControl. Вот ссылка, которая имеет похожие вызовы и должна быть хорошей отправной точкой: Defrag API C # wrappers
Ответ №2:
Это получение шины SCSI #, идентификатора # на этой шине и LUN по этому идентификатору. Вероятно, вам нужно будет выяснить, что с этим делается, чтобы понять, как его осмысленно перевести / заменить. Если память не изменяет, вы можете извлечь часть той же информации через WMI, но есть довольно большая вероятность, что это не принесет большой пользы — основное использование этой информации — передавать ее обратно при выполнении других вызовов DeviceIoControl.