שאלה קשה ומסובכת...

MotiAd

New member
שאלה קשה ומסובכת...

שלום, יש לי בעייה בקוד הבא. אני כתבתי אותו ב-Visual Basic .NET אני קורא לפונקציית API שמחזירה לי מצביע למבנה נתונים שמופיע מטה. המצביע שמוחזר מצביע לי למחרוזת תווים של שם משתמש אבל כמו שתראו אני צריך לדעת עוד פרטים כמו סיסמא. שחקתי קצת עם הערך של המצביע והגעתי למצביע שמצביע לי על ה-Comment של המשתמש. יש איזושהי חוקיות בדבר? קצת הסבר: Integeter ב-Visual Basic .NET הוא 32Bit ואני ממיר כל מחרוזת (String) למערך בתים של Unicode שבא כל תו מאופיין ע"י שני בתים. כל הבעייה שלי היא שאני יכול לקבל ולהראות שמות של משתמשים אבל להראות מידע אחר אני לא מצליח. שיחקתי עם הערך של המצביע שהפונקציה מחזירנ לי כלפי מטה ומעלה וללא הועיל. אני מנסה לדעת האם יש חוקיות מסויימת וכיצד אני יכול לדעת באיזה ערך מצביע מתחיל המידע הבא? האם משהו שאני כתבתי הוא לא נכון?
Public Function GetInfo(ByVal Servername As String, ByVal UserName As String) As Integer Dim i As Integer, j As Integer, k As Integer Dim ServerNameB() As Byte, User() As Byte Dim BufPtr As Integer, TempPtr As Integer Dim MainInfo As User_Info_1 ReDim ServerNameB(Servername.Length * 2) ReDim User(UserName.Length * 2) For i = 0 To Servername.Length - 1 ServerNameB(j) = Asc(Servername.Chars(i)) j += 2 Next j = 0 For i = 0 To UserName.Length - 1 User(j) = Asc(UserName.Chars(i)) j += 2 Next k = NetUserGetInfo(ServerNameB(0), User(0), 1, MainInfo) MsgBox(k) k = PtrToInt(TempPtr, MainInfo.HomeDirectory, 4) k = PtrToStr(User(0), TempPtr) MsgBox(MainInfo.Comment & vbCrLf & MainInfo.Flags & vbCrLf & MainInfo.HomeDirectory & vbCrLf & MainInfo.Password & vbCrLf & MainInfo.Privileges & vbCrLf & MainInfo.ScriptPath & vbCrLf & MainInfo.UserName) For i = 0 To 50 If (User(i) <> 0) Then MsgBox(Chr(User(i))) End If Next End Function Structure User_Info_1 Dim UserName As Integer Dim Password As Integer Dim PasswordAge As Integer Dim Privileges As Integer Dim HomeDirectory As Integer Dim Comment As Integer Dim Flags As Integer Dim ScriptPath As Integer End Structure Public Declare Function StrToPtr Lib "Kernel32" Alias "lstrcpyW" (ByVal Ptr As Integer, ByRef Source As Byte) As Integer Public Declare Function PtrToStr Lib "Kernel32" Alias "lstrcpyW" (ByRef Ptr As Byte, ByVal Source As Integer) As Integer Public Declare Function PtrToInt Lib "Kernel32" Alias "lstrcpynW" (ByRef RetVal As Integer, ByVal Ptr As Integer, ByVal nCharCount As Integer) As Integer Public Declare Function StrLen Lib "Kernel32" Alias "lstrlenW" (ByVal Ptr As Integer) As Integer Public Declare Function NetUserGetInfo Lib "NETAPI32.DLL" (ByRef ServerName As Byte, ByRef UserName As Byte, ByVal Level As Integer, ByRef Buffer As User_Info_1) As Integer​
 
למעלה