一个超级问题,在线300分

lnk 2003-05-17 09:15:02
我在是VB中进行工业控制编程的,主要是控制马达等移动,WINDOWS中的配置或运行其它程序都对我的程序影响很大,我把控制硬件的部分用BORLAND C写成一个DLL,但还是不能消除影响,怎么把我的DLL变成一个系统级的具有最高的优先权限,不受其它应用程序的影响.
各位大虾提点意见,谢谢先!!!!!
...全文
24 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fullor2000 2003-05-19
  • 打赏
  • 举报
回复
你是说要独占时间片的方法吧。
我好像听说过可以通过欺骗windows的方法为某个进程单独分配时间片。
aspvbjava 2003-05-19
  • 打赏
  • 举报
回复
高手!
lnk 2003-05-19
  • 打赏
  • 举报
回复
老兄:这要很长的时间呀!我有另一系统是用BORLAND 3.1 FOR DOS写的,编译时有30M行左右,花了我一两年的时间。
fzn0621 2003-05-17
  • 打赏
  • 举报
回复
果然是超级问题,看来在下是帮不了你了。。只能帮你UP一下了~~
Randy_Lynd 2003-05-17
  • 打赏
  • 举报
回复
你要做到绝对的实时是不可能的,因为WINDOWS不象DOS,它不是实时系统.但要满足你运行程序得到结果的要求我想应该可以实现.

想通过系统优先级别来实现我想不会太精确,你优先权再高,总高不过windows 内核吧,它内核总要占用你的时间片的.如果你精度要求比较高,在内核消耗资源的情况下肯定会出问题.
如果实在不行,建议你用DOS写代码.你不是C很熟吗?
我以前也遇到过此类情况.
老人参 2003-05-17
  • 打赏
  • 举报
回复
哦,

高手,

好厉害呀

你用单片机通讯做什么?不是就控制吗?
lnk 2003-05-17
  • 打赏
  • 举报
回复
我们的板卡都是自已设计的,本来是应该用单片机控制的,但由于通讯那部分处理的不是很理想,所以暂时只能用PC控制。
老人参 2003-05-17
  • 打赏
  • 举报
回复
我也研究工控,
但知道得很少,
你用过PCL板卡吗?
不同型号的电机有不同的工控板卡,
我们的编程语言直接调用它做好的包就可以,
好像不用考虑那么多,
小弟对工控了解不多,
见凉。
lanWay 2003-05-17
  • 打赏
  • 举报
回复
我抬头仰望...果真都是高手.......:)
lnk 2003-05-17
  • 打赏
  • 举报
回复
rainstormmaster:谢谢你,我的想法基本也是这样,我先按你的思路试试,可能要过几天才能
结贴,各位大侠也可提点建议,分数不够可再开贴,先谢谢了!
chenyu5188 2003-05-17
  • 打赏
  • 举报
回复
同意rainstormmaster的

当时的CHI病毒就是获取系统的最高权ring 0来做恶的。
feihong0233 2003-05-17
  • 打赏
  • 举报
回复
用DOS

或者把除了程序别的进程都杀了~
yrf 2003-05-17
  • 打赏
  • 举报
回复
厉害厉害,不得不UP了
rainstormmaster 2003-05-17
  • 打赏
  • 举报
回复
我估计楼主的意思是要获得Ring0级权限吧,一般两条路:一条路是利用系统漏洞获取0层权限,另一条是利用ddk编写vxd,都比较困难。可以试试先GetCurrentThread然后利用SetThreadPriority设置线程的优先级别
SetThreadPriority:

【VB声明】
Private Declare Function SetThreadPriority Lib "kernel32" Alias "SetThreadPriority" (ByVal hThread As Long, ByVal nPriority As Long) As Long
【说明】
设定线程的优先级别
【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError
【备注】
线程的优先级同进程的优先级类组合在一起就决定了线程的实际优先级
【参数表】
hThread -------- Long,线程句柄
nPriority ------ Long,返回带有THREAD_PRIORITY_???前缀的某个函数,它定义了线程的优级。
实例:
Const THREAD_BASE_PRIORITY_IDLE = -15
Const THREAD_BASE_PRIORITY_LOWRT = 15
Const THREAD_BASE_PRIORITY_MIN = -2
Const THREAD_BASE_PRIORITY_MAX = 2
Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
Const THREAD_PRIORITY_NORMAL = 0
Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Const HIGH_PRIORITY_CLASS = &H80
Const IDLE_PRIORITY_CLASS = &H40
Const NORMAL_PRIORITY_CLASS = &H20
Const REALTIME_PRIORITY_CLASS = &H100
Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
Private Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As Long
Private Declare Function GetPriorityClass Lib "kernel32" (ByVal hProcess As Long) As Long
Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Sub Form_Load()
Dim hThread As Long, hProcess As Long
'retrieve the current thread and process
hThread = GetCurrentThread
hProcess = GetCurrentProcess
'set the new thread priority to "lowest"
SetThreadPriority hThread, THREAD_PRIORITY_LOWEST
'set the new priority class to "idle"
SetPriorityClass hProcess, IDLE_PRIORITY_CLASS
'print some results
Me.AutoRedraw = True
Me.Print "Current Thread Priority:" + Str$(GetThreadPriority(hThread))
Me.Print "Current Priority Class:" + Str$(GetPriorityClass(hProcess))
End Sub

GetCurrentThread:
【VB声明】
Private Declare Function GetCurrentThread Lib "kernel32" Alias "GetCurrentThread" () As Long

【说明】
获取当前线程的一个伪句柄

【返回值】
Long,当前线程的伪句柄

【备注】
只要当前线程需要使用一个线程句柄,就可以使用这个伪句柄(但在其他任务线程中都无效)。该句柄可以复制,但不可继承。不必调用CloseHandle函数来关闭这个句柄

实例:

Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)
Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, lpExitCode As Long) As Long
Private Sub Form_Load()
'Exit this thread
ExitThread GetExitCodeThread(GetCurrentThread, 0)
End Sub
试试吧,如果不行的话,最好自己研究研究DDK,很明显这已经超出了vb的范围,或者联系一下变速齿轮的作者,问问他,是怎么利用系统漏洞,获取系统0层权限的。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧