|
Oh yes, pack Chris code in a function and call it.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
|
|
Hi all,
I've got this piece of code that just won't compile under VC++ 6.0:
__asm {
mov ax, 0040h
mov ds, ax
mov w.[0072h], 0000h
jmp 0FFFFh:0000h
};
The three errors I get are error C2415: improper operand type , error C2400: inline assembler syntax error in 'second operand'; found ':' , and error C2400: inline assembler syntax error in 'opcode'; found ':' . The first two all point to the jmp instruction, but I don't see how it's messed up.
I'm not surprised if there's an obvious error in there; I hardly ever work with asm.
Thanks in advance, and please don't point out that it's a bad idea to do this. I realize that, and the code above is only executed in emergency circumstances.
|
|
|
|
|
Why do you want to execute instructions which will reboot the computer? This will not even execute in usermode on a modern OS such as XP/Vista.
-David Delaune
|
|
|
|
|
Why not? Even if it doesn't work, it should compile at least, right?
modified on Monday, March 17, 2008 3:26 PM
|
|
|
|
|
Not with the syntax your using and addressing.
Try:
__asm
{
mov eax, 0040h
mov ds, WORD PTR [eax]
mov WORD PTR ds:0x72, 0x1234
mov eax,0xFFFF0000
jmp eax
}
As I stated previously... this code does not work in protected mode. So you should be testing this on *nix or DOS based systems. However if you want to accomplish the same in Windows you can use the following function as long as you have the correct privileges.
ExitWindowsEx(EWX_POWEROFF|EWX_FORCE, 0xFFFF);
|
|
|
|
|
Thanks for the advice.
The problem that comes up with ExitWindowsEx is that I have to make sure my application closes last. Which, unless I'm mistaken, isn't possible? And ExitWindowsEx goes through the normal shutdown process. What I'm trying to do is to completely STOP everything.
Thanks for all your help.
|
|
|
|
|
hxhl95 wrote: What I'm trying to do is to completely STOP everything.
Microsoft Windows is not designed to shutdown instantly. There are things which need to be cleaned up like disk cache and virtual memory. In fact even if you wrote a device driver which executed the instructions I have written in the prior threads and managed to initiate an instant cold/warm reboot; You would have a probability of file corruption which may or may not include the registry. In fact, you would also have a high risk of disk corruption on non-journaling file systems and a small risk on journaling file systems. There are manyb things that are happening 'under the hood' when you shutdown Microsoft Windows.
Some questions:
1.) Why dows your application need to be the last to exit.
2.) Do you need your application to be the last 'user' application to exit?
Best Wishes,
-David Delaune
|
|
|
|
|
So it's not possible to shutdown instantly. Is there any faster way to shutdown other than the normal "click the shutdown button" routine?
Answers to your 2 questions: 1.) Cleanup, 2.) Yep.
|
|
|
|
|
hxhl95 wrote: Is there any faster way to shutdown other than the normal "click the shutdown button" routine?
There are no methods which are faster and equally as graceful than the standard shutdown/reboot functions.
Best Wishes,
-David Delaune
|
|
|
|
|
http://www.gold-software.com/download3774.html[^]
How might that piece of software work? I found it a few hours ago and it apparently it uses NtShutdownSystem(). I've done some research on that, and it doesn't seem to cause any disk corruption.
Any advice? Thanks.
|
|
|
|
|
I was going to mention this earlier but decided not to give you bad advice. You are correct in that you can safely call NtShutdownSystem() and it will (probably) not corrupt the Windows OS. Because NtShutdownSystem() flushes the registry hive to disk and empties the page file and then flushes the cache of all drives and disables interrupts before emitting the same machine instructions I posted in the prior posting.
However you need to consider that everything executing in ring-3 will be oblivious to what your doing. Which means any applications with unsaved data will be unexpectedly terminated. This also includes the service controller which expect its ScShutdownNotificationRoutine to be invoked by a CTRL_SHUTDOWN_EVENT message. You may need to manually invoke ScShutdownAllServices() if possible. BTW this is why Windows takes so long to shutdown... each service is given up to 20 seconds to respond to the SERVICE_CONTROL_SHUTDOWN notification. Most respond within a second or two.
I would also recommend broadcasting a WM_QUERYENDSESSION followed shortly by a WM_ENDSESSION message to all top level windows. At least give them a chance to shutdown properly.
But now we are close to Microsofts implementation now aren't we!
I'm afraid your on your own here. I certainly hope this is not a commercial application your creating.
Good Luck,
-David Delaune
|
|
|
|
|
hxhl95 wrote: Answers to your 2 questions: 1.) Cleanup...
So what difference does it make if your application exits before or after Word or Paint?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
If this code actually works... it will only work in DOS. I don't have a DOS box here in my office so I cannot test it.
void RebootWithoutAsm(bool bWarm)
{
int iWarm = true == bWarm ? 0x1234 : 0;
void ((*Reboot)())=(void(*)())((0x0040L << 16) | 0x0072L);
*(int*)((0x0040L << 16) | 0x0072L) = iWarm;
(*Reboot)();
}
Best wishes,
-David Delaune
|
|
|
|
|
Hi, i wonder if there is a method to get more informations about the inside of a template. For example
template<typename databasetype="">
int OKDatabaseFile<databasetype>::OpenDatabase ....
Inside this function OpenDatabase, i have the template DATABASETYPE. I can get the size of this template with "sizeof", still i want more. I want the number of variables inside the DATABASETYPE struct, i want the names of the variables, the datatypes.
Is that possible?
|
|
|
|
|
HorrorVision wrote: i want the names of the variables, the datatypes.
Is that possible?
no. C++ doesn't have any such capability.
|
|
|
|
|
Hi buddy!
Can you tell me how to change writing direction in an edit box (MFC) from right/left to left/right please?
I mean at RUN TIME...
modified on Monday, March 17, 2008 12:19 PM
|
|
|
|
|
Does the WS_EX_RTLREADING style work for you? It can be set at design time as well as run-time.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I have 3 USB ports on my PC. I am using one for my keyboard and other is connected to a mouse and the 3rd one is free.
But the device manager of my PC shows 5 USB Universal Host controllers 27C8,27C9,27CA,27CB & 27CC.
I will be connecting a controller board to the free USB port. I need to use CreateFile(), ReadFile() and WriteFile() to read and write to the USB port.
Now how do I identify the free port?
|
|
|
|
|
You don't access the USB port the same way you access a serial port (so, you don't specify the "port name" to the CreateFile function). Instead you get a handle to a device driver which will communicate with the USB device. So, you need to give the identification of this driver to the CreateFile function. This is of course totally dependant of which USB device you are trying to communicate with. Normally, this should be described in the documentation of the controller board.
|
|
|
|
|
I defined a data type in a base calss .h file , not in the calss and all the dreived classes are flash the below error, Any advice pls.... I need this enum to be access to all the dlg class
error LNK2005: "enum ABC @@A) already defined in kkk.obj
And also the below warining
warning LNK4006:
|
|
|
|
|
add a #pragma once at the beginning of your .h file...
|
|
|
|
|
|
ptr_Electron wrote: error LNK2005: "enum ABC @@A) already defined in kkk.obj
See here.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|