Hur ändrar man på THREAD_ALL_ACCESS "vektorn" för att programmet ska kunna köra i xp?

Permalänk
Medlem

Hur ändrar man på THREAD_ALL_ACCESS "vektorn" för att programmet ska kunna köra i xp?

Då var det dags för yttligare en fråga då

Jag sitter på en vista maskin och skriver samt kompilerar kod, sedan vill jag kunna köra programet även på en xp dator men får access denied errors när jag försöker skriva till ett textdokument.

Jag har lyckats hitta vad det beror på (tror jag) men fattar inte hur man ska lösa det!

Problemet är tydligen när man försöker skriva från en egenskapad tråd, så har den på något sätt en längre "Access vektor" i vista än i xp och feltolkas således av xp datorn vilket leder till access denied.

Så här står det i hjälpen från visual studio

THREAD_ALL_ACCESS: All possible access rights for a thread object. Windows Server 2003 and Windows XP/2000: The value of the THREAD_ALL_ACCESS flag increased on Windows Server 2008 and Windows Vista. If an application compiled for Windows Server 2008 and Windows Vista is run on Windows Server 2003 or Windows XP/2000, the THREAD_ALL_ACCESS flag contains access bits that are not supported and the function specifying this flag fails with ERROR_ACCESS_DENIED. To avoid this problem, specify the minimum set of access rights required for the operation. If THREAD_ALL_ACCESS must be used, set _WIN32_WINNT to the minimum operating system targeted by your application (for example, #define _WIN32_WINNT _WIN32_WINNT_WINXP). For more information, see Using the Windows Headers.

Hela avsnittet finns här: Thread Security and Access Rights (Windows)

Någon som har stött på detta förut och vet hur man ändra på THREAD_ALL_ACCESS? hör försökt kika runt på nätet men hittar bara förslag i C# eller C++ vilket jag inte lyckas översätta till visual basic :/

tack på förhand

Niklas

Permalänk
Medlem

Är det inte så att dina "access denied"-fel beror på att du inte har rättighet att komma åt det där textdokumentet? Om inte så kan du väl posta den delen av koden där du manipulerar din tråd/security descriptor.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

Allts om vi säger så här, först kör jag den här raden kod utanför troden, dvs i huvud formen:

My.Computer.FileSystem.WriteAllText("Test1.txt", "Detta är ett test", False)

sedan startar jag en trod och gör samma sak:

Private WithEvents backgroundWorker1 As System.ComponentModel.BackgroundWorker Private Sub backgroundWorker1_DoWork() Handles backgroundWorker1.DoWork My.Computer.FileSystem.WriteAllText("Test2.txt", "Detta är ett test", False) end sub Public sub Start_thread backgroundWorker1 = New System.ComponentModel.BackgroundWorker backgroundWorker1.RunWorkerAsync() end sub

Då får jag access denied när den ska skriva till Test2, eller skapa snarare.

Citat:

posta den delen av koden där du manipulerar din tråd/security descriptor.

Jag manipulerar den inte någon stans eftersom jag inte vet hur man gör men det är där man ska sätta nån minimum krav antar jag

Permalänk
Medlem

OK, nu förstår jag. Tyvärr kan jag inte hjälpa dig med VB. Om du ska använda en egen security descriptor så måste du använda CreateThread, vilket ökar komplexiteten och jag förstår att du inte vill gå den vägen.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607