Konu: run as komutunu VFP'de API ile yazmak
Merhaba,
Başlık tuhaf oldu ama başka söz bulamadım. Mesaj da uzun, kusura bakmayın.
Ağ ortamında kullanılmak üzere VFP'de yazdığım program uzunca bir süredir kullanılıyor.
Tipik bir düzen var. Terminallerde EXE ve dll'ler var, esas tablolar ise Windows Server 2003 yüklü bir makinada.
Terminallerden sunucuya ulaşmak için Run As benzeri bir fonksiyon sağlayan Runasspc.exe adlı bir program kullanıyorum.
Bunun için bir bat dosyası oluşturdum ve kısayolu masaüstünde. Kullanıcılar bunu çalıştırıyor. içeriği şöyle:
@ECHO OFF
runasspc /program:"c:\cbpat\cbpat.exe" /domain:"localhost" /user:"cbpat" /password:"1234" /logon:netonly /quiet
Böylelikle sunucuda oluşturduğum cbpat adlı kullanıcıve 1234 şifresiyle esas tablolara erişebiliyor. Buradaki netonly bu kimlik bilgilerini yalnızca network erişimlerinde kullanmasını sağlamak için. Yerel dosyalara erişim için bu kimlik bilgileri kullanılmıyor.
runasspc ile network kaynağı korunmuş oluyor.
cbpat.exe benim VFP'de yazdığım program.
İlk sorum şu; runasspc kullanan var mı? Ya da arkadaşlar yerine ne kullanıyor?
İkinci sorum da; ana bilgisayarda değişiklik yapılacak benim de bat dosyasındaki bilgileri değiştirilebilir kılmam istendi.
Yani yine VFP'de ek birşeyler yazıp anabilgisayarın adını, erişim için kullanıcı adı ve psw'yi bir dbf'ye kaydeden ve gerektiğinde edit edilebilecek bir setup benzeri bir program yazmam gerek. Bunun için Windows'un API'sini kullanan bir kod buldum. Üzerinde epey çalışıp düzenledim. İşi yapıyor ancak network printerlarına erişimde sorun çıkarıyor. Kod şöyle:
PROCEDURE ChangeUser
LPARAMETERS lpUser,lpPassword
DECLARE integer LogonUser IN AdvApi32.DLL string szUsername, string lpszDomain,string lpszPassword,;
integer dwLogonType,integer dwLogonProvider,integer @phToken
DECLARE integer ImpersonateLoggedOnUser IN AdvApi32.DLL integer hToken
LOCAL nToken
nToken=0
LogonUser(lpUser,"localhost",lpPassword,9,3,@nToken)
ImpersonateLoggedOnUser(nToken)
CLEAR DLLS
ENDPROC
Bu durumda başka çözümler aradım. runasspc.exe'nin yine Windows API'sindeki CreateProcessWithLogonW fonksiyonunu kullandığını anladım. Bu fonksiyonu kullanan örnek kodların hepsi sorunlu. Bu konuda yardım rica ediyorum.
İyi günler...