如何在不调用 API 的情况下获取 UNC 驱动器的序列号

How to get the serial number of UNC Drive Without API calling

出于安全原因,我希望我的工作簿只能在网络上使用。 该网络有时由具有不同字母的用户映射。 我想找到一种方法来根据 UNC path 而不是驱动器号来获取网络驱动器的序列号。 但我想在不调用 API 的情况下执行此操作,因为某些计算机的 Windows 有问题。 我有下面的代码,但需要驱动器号。我想改用 UNC drive 路径。

Public Function HDSerialNumber() As String
  Dim fsObj As Object
  Dim Drv As Object
  Set fsObj = New Scripting.FileSystemObject
  Set Drv = fsObj.Drives("J")
  HDSerialNumber = Left(Hex(Drv.SerialNumber), 4) _
                 & "-" & Right(Hex(Drv.SerialNumber), 4)   
End Function

只为你的兴趣。如果您尝试使用 xlSheetVeryHidden 和 VBA 的组合来隐藏工作簿中的信息,您可以使用以下代码轻松地欺骗它:

你只需要将这段代码放入一个新的工作簿中(输入你想要攻击的文件名)并运行它。它将打开您的文件(防止文件中的代码来自 运行ning)并使所有工作表可见。

只需 10 行代码,您检查连续出版物等的所有努力就是如此轻松。

Sub ShowAllWorkbooks()
    Dim OpenWb As Workbook
    Application.EnableEvents = False 'prevent autorun of workbook_open and other events
    Set OpenWb = Workbooks.Open(Filename:="PathToFileYouWantToShow")

    Dim ws As Worksheet
    For Each ws In OpenWb.Worksheets
        ws.Visible = xlSheetVisible
    Next ws
    Application.EnableEvents = True
End Sub

即使您的 VBA 代码受密码保护无法查看,这仍然有效。


如果您不关心那个安全漏洞,那么我建议如下:

将此添加到您的 Workbook_Open 活动中:

Option Explicit

Private Sub Workbook_Open()
    If ThisWorkbook.Path <> "your server path" Then
        MsgBox "This file can only be run from the server!"
        ThisWorkbook.Close SaveChanges:=False
    Else
        'make all worksheets visible
    End If
End Sub

它将检查当前工作簿是否来自 "your server path" opened/started 如果不是,它将立即关闭工作簿。

或者只检查您的 UNC 路径是否存在:

Option Explicit

Private Sub Workbook_Open()
    Dim Fso As Object
    Set Fso = CreateObject("Scripting.FileSystemObject")

    If Not Fso.FolderExists("your server path") Then
        MsgBox "This file can only be run from the server!"
        ThisWorkbook.Close SaveChanges:=False
    Else
        'make all worksheets visible
    End If
End Sub