2011-04-30 104 views
1

嗨,我有下面的代码,我想转换为C#。你可以在这里分享一些灯光,我如何将它们转换为C#?我不熟悉C++。尤其是在调用WinBase API的函数DeviceIoControl上。在C#中,我应该使用什么函数来取代DeviceIOCOntrol?如何将其转换为C#

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), 
                &returned, 
                FALSE); 
+1

而不是试图直接翻译它,也许尝试重新创建它应该做的? – mpen 2011-04-30 06:03:51

+1

感谢您的回复。但我宁愿转换而不是重新创建,因为我对总体程序流程不太熟悉。 – VeecoTech 2011-04-30 06:09:41

回答

2

您必须使用P/Invoke互操作来访问DeviceIoControl。这是一个有相似呼叫的链接,应该是一个很好的起点:Defrag API C# wrappers

1

这是检索该总线上的SCSI总线#,ID#和该ID上的LUN。您可能需要弄清楚正在做什么来弄清楚如何翻译/有意义地替换它。如果内存提供服务,您可以通过WMI获取一些相同的信息,但是有一个相当公平的机会不会有很大的好处 - 这些信息的主要用途是在进行其他DeviceIoControl调用时将其传回。