CreateFile() Работает в Windows XP, но не работает в Windows 7

При попытке создать обработчик с помощью CreateFile(), даже при выполнении приложения от имени администратора, я получаю следующее сообщение об ошибке: "Системе не удалось найти указанный файл. (Исключение из HRESULT: 0x80070002)": Ничего."

Вот пример кода, используемого для этой задачи:

Private Enum EFileAccess As System.Int32
        GENERIC_WRITE = &H40000000
End Enum

Friend Enum EFileShare        
    FILE_SHARE_READ = &H1
    FILE_SHARE_WRITE = &H2
End Enum

Friend Enum ECreationDisposition        
    OPEN_EXISTING = 3
End Enum

Friend Enum EFileAttributes
   FILE_FLAG_NO_BUFFERING = &H20000000
End Enum

<DllImport("kernel32.dll", SetLastError:=True, CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
    Private Shared Function CreateFile(ByVal lpFileName As String, _
                                ByVal dwDesiredAccess As EFileAccess, _
                                ByVal dwShareMode As EFileShare, _
                                ByVal lpSecurityAttributes As IntPtr, _
                                ByVal dwCreationDisposition As ECreationDisposition, _
                                ByVal dwFlagsAndAttributes As EFileAttributes, _
                                ByVal hTemplateFile As IntPtr) As Microsoft.Win32.SafeHandles.SafeFileHandle
    End Function

Путь указывает на матричный принтер в Windows Server 2003.

handle = CreateFile(\\brbhzpc001154\Epson_2180,
                                EFileAccess.GENERIC_WRITE,
                                EFileShare.FILE_SHARE_READ Or EFileShare.FILE_SHARE_WRITE,
                                IntPtr.Zero,
                                ECreationDisposition.OPEN_EXISTING,
                                EFileAttributes.FILE_FLAG_NO_BUFFERING,
                                IntPtr.Zero)

Это приложение, когда скомпилировано, работает без ошибок в Windows XP, но при попытке выполнить в Windows 7 всегда возникает ошибка, описанная выше.

1 ответ

Решение

Здесь есть решения, предполагающие, что на Win7 изменение OPEN_EXISTING на OPEN_ALWAYS заставит его работать на Win7, но без объяснения причин.

Другие вопросы по тегам