|
|
Well, no responses, but I was digging through the cheat engine source and I found
VOID
RtlCopyMemory(
IN VOID UNALIGNED *Destination,
IN CONST VOID UNALIGNED *Source,
IN SIZE_T Length
);
... Go me... cheers!
|
|
|
|
|
|
Im not so sure I can use some of those functions you mentioned as they include Windows.h (the goal is a driver that is injected into the kernal that will read/write ram), I dont have my DDK installed as a virus ate my system =(. but Ill check em out. Thanks man!
EDIT: new question, maybey it will get answered before I find the answer: How do I receive the debug messages from my driver?
ie)DbgPrint("Exception in GetMemoryRegionData\n");
modified on Saturday, December 26, 2009 3:10 PM
|
|
|
|
|
Mattzimmerer wrote: How do I receive the debug messages from my driver?
DebugView from sysinternal DebugView[^]
Be wary of strong drink. It can make you shoot at tax collectors - and miss.
Lazarus Long, "Time Enough For Love" by Robert A. Heinlein
|
|
|
|
|
Kernel mode drivers are written in C and not assembly.
When in kernel mode memory is divided into paged and non-paged pool.
If the function you're currently in is non-pagable you cannot safely access memory in the paged pool.
You will need to properly understand memory management in Windows especially from the kernel mode to do the task safely.
|
|
|
|
|
Yea, I'm decent with C, I just don't know my way around the kernel to well. I've noticed a few sources I've pulled used _asm{} in driver code so I know you can do it. Anyways thanks for the input. Anything that points me to the prerequisite knowledge is greatly appreciated.
|
|
|
|
|
Hi,
Mattzimmerer wrote: I just don't know my way around the kernel to well
Well, IMHO, you need to know the kernel inside Out, and Backward Front, before you should even attempt to mess with the Hardware end of Memory.
Otherwise, it is bound to end up in tears!!
If you explain to us what you want to achieve in the first place, I'm quite sure that one of us can then point you in a direction to reach your goal without resort to that sort of hardware access.
Bram van Kampen
|
|
|
|
|
yea, I can do what I'm trying to do without this kind of hardware access, basically I'm going for a kernel level readprocessmemory(). Dont worry friend, I welcome the tears of learning! I recognize that this is not an easy thing to do. Ok what was my question, ohh yea signing drivers. I seemed to have managed to test sign my driver and boot my OS in a mode so I can use test signed drivers (using vista64x, and wow its a pain, I was encountering so many less problems in vista 32x)
Right now my biggest problem is loading the drivers. I have been using OSR Loader on vista 32x without a problem, but on 64x none of the OSRLoader exe files can even open up the sample drivers that I built out of the WDK library.
If no one gives me a better solution my current scope is writing INF files...
So I really don't wanna hear its hard and I need to know this and that, I'm learning this and that and beleive me its so much fun (im a computer engineering major so this stuff is to my benifit)! My GF hates it lol...
I guess I have one question: Is it possible to correctly sign a driver using the makecert command in shell? I'm probally missing the grasp on that whole area...
|
|
|
|
|
Well,
Mattzimmerer wrote: I welcome the tears of learning! I recognize that this is not an easy thing to do.
Please Note that on this occasion the tears of learning could include a trashed harddrive.
My First and Personal advice is: Revert to Windows XP.
My Loathing of Vista is well documented on this forum.
At the same time, I do not believe that MS was that stupid to as to leave out a documented method to load drivers.
At any rate, if the above fails,
what you seem to need to nudge is in that case not Process Memory, but you need probably to clobber a few bytes in your Driver File! Load it, Make your Mods, and Save it!
Bram van Kampen
|
|
|
|
|
Yea, they got good documentation on loading drivers, its just going to take some time to get the task done. I had a feeling I could possibly trash a hard drive, I think im going to still take some whacks at vista, but I was planning on setting up a different OS on a separate hard drive, and just now I noticed the possibility of trashing my main OS even though its on a different partition ... Guess Ill just unplug it !
Do you think I could trash my OS if I only code a readmemory function and not a write memory function? My plan was to only attempt to write to memory when I know the exact behavior of my device reading from memory.
Say my driver:
1) allocates its own memory
2) copies a byte from a specified address into its own memory
I should be fine right? How could I possibly screw that up right?
|
|
|
|
|
Mattzimmerer wrote: Say my driver:
1) allocates its own memory
2) copies a byte from a specified address into its own memory
I should be fine right? How could I possibly screw that up right?
What IRQ level is your driver running at? Allocating might not be available at that level. Then it will screw up! Also, from what memory context are you assuming your specified address for reading your byte. The High level virtual memory experience is created by smoke and mirrors at driver level. Driver land is another country, they do things different there.
Bram van Kampen
|
|
|
|
|
Well I was getting ahead of myself when I said that stuff. I'm not going to lie, I started out 100% fresh to wdf, and this is probally going to take me a lot of time since I need to learn everything. So I don't know yet...
Right now I have a lowly goal of getting an "empty" driver that will print debug messages when my GUI app sends the appropriate irp. And at this very moment, I've blown my mind at why OSR Loader cannot start my service. OSRLoader says: "The Driver has been blocked from loading".
Im guessing my driver code is incomplete, maybey missing a required function... (dunno the lingo)
heres my header, would I need anything else to get my service to start/stop?
#if !defined(_MEMORYREADER_H_)<br />
#define _MEMORYREADER_H_<br />
<br />
#include <ntddk.h><br />
#include <wdf.h><br />
<br />
#define __DRIVER_NAME "MR: "<br />
<br />
typedef struct _DEVICE_CONTEXT {<br />
WDFQUEUE IoDefaultQueue;<br />
} DEVICE_CONTEXT, *PDEVICE_CONTEXT;<br />
<br />
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(DEVICE_CONTEXT, GetDeviceContext);<br />
<br />
<br />
NTSTATUS<br />
DriverEntry(<br />
IN PDRIVER_OBJECT DriverObject, <br />
IN PUNICODE_STRING RegistryPath<br />
);<br />
<br />
NTSTATUS<br />
EvtDriverDeviceAdd(<br />
IN WDFDRIVER Driver,<br />
IN PWDFDEVICE_INIT DeviceInit<br />
);<br />
<br />
NTSTATUS<br />
EvtDevicePrepareHardware(<br />
IN WDFDEVICE Device,<br />
IN WDFCMRESLIST ResourceList,<br />
IN WDFCMRESLIST ResourceListTranslated<br />
);<br />
<br />
VOID<br />
EvtDeviceIoDefault(<br />
IN WDFQUEUE Queue,<br />
IN WDFREQUEST Request<br />
);<br />
<br />
NTSTATUS<br />
EvtDeviceD0Entry(<br />
IN WDFDEVICE Device,<br />
IN WDF_POWER_DEVICE_STATE PreviousState<br />
);<br />
<br />
NTSTATUS<br />
EvtDeviceD0Exit(<br />
IN WDFDEVICE Device,<br />
IN WDF_POWER_DEVICE_STATE TargetState<br />
);<br />
<br />
#endif //(_MEMORYREADER_H_)<br />
<br />
Does OSR Loader work properly with Vista x64? If it does I would love a working example of a basic driver.
|
|
|
|
|
|
What a great sample, seems to be exactly what I need! So if my driver calls DriverEntry it is operating in PASSIVE_LEVEL? Is this still in ring-0?
|
|
|
|
|
Mattzimmerer wrote: So if my driver calls DriverEntry
Your Driver does not call DriverEntry, The OS does that.
Mattzimmerer wrote: Is this still in ring-0
That depends on from what level the OS calls the driver.
Read the WHOLE article, not just the sample, and most of your questions will be answered.
Bram van Kampen
|
|
|
|
|
Hello all im new to this please could you help me out.
Iv got a few questions i need answering and have searched everywhere and this is my last resort i would appreciate any help thank you very much.
Programming methods to read data from / write data to a USB port in C++
1 Review of the programming methods to read data from/write data to a USB port
2 Main applications.
3 Different programming methods for using USB ports for data transmission.
4 Advantages and disadvantages of different programming methods for data transmission via USB ports.
5 Working principle of a USB port.
6 Specifications of a USB port.
7 Main commands for operation of a USB port.
Thank you
modified on Friday, December 25, 2009 6:01 PM
|
|
|
|
|
What did your literature search turn up? Out of that do you have a specific question?
You measure democracy by the freedom it gives its dissidents, not the freedom it gives its assimilated conformists.
|
|
|
|
|
Writing to USB is not like writing to a serial or parallel port. The manufacturer of your USB device provides you with a driver that is installed and that driver exposes the USB as "something" to the rest of the system ... maybe a hard drive, maybe a serial port, maybe a custom widget, maybe a mouse. The manufacturer / driver dictates how you talk to the device based on the method of communication they have chosen to expose.
Judy
Be wary of strong drink. It can make you shoot at tax collectors - and miss.
Lazarus Long, "Time Enough For Love" by Robert A. Heinlein
|
|
|
|
|
Ubid007 wrote: Programming methods to read data from / write data to a USB port in C++
ReadFile() and WriteFile() can do this.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Hi, I have a window that uses glass. I use DwmEnableBlurBehindWindow to enable the glass effect. (DwmExtendFrameIntoClientArea is not enough for me because it doesn't work for simple window with no frame). I use a 32-bit bitmap for the background and I control the opacity of the window through the alpha channel.
I have a pager control in my window and a toolbar control inside the pager. I don't want the pager or the toolbar to have any transparency. The rectangular area of the background bitmap behind them is fully opaque.
The problem is that any non-white pixel drawn by the pager or the toolbar become transparent (punch a whole in my opaque background). Black pixels become fully transparent, and 50% gray become 50% transparent. I guess the reason is that GDI sets the alpha channel based on the brightness of the color.
After some research I was able to fix the toolbar by drawing it in a buffered bitmap, then setting the bitmap alpha to 255 with BufferedPaintSetAlpha . The pager however is not so simple. It draws its buttons on its non-client area, and does so not only on WM_NCPAINT but on mouse messages and at other inconvenient times. There is no owner-draw or custom-draw system for pager controls.
So. Ideally I want to make a rectangular portion of my top window 100% opaque no matter what is drawn on it later. Next best thing would be a way to override the drawing of the pager control.
Any ideas?
Thanks
Ivo
|
|
|
|
|
Hi,
How to get temp folder path?
|
|
|
|
|
Did Google break down on you? this [^] is amongst the first hits for: How to get temp folder path? .
|
|
|
|
|
Hello,
Does anyone know a good beginner's tutorial in
programming?
Desirably it should have some nice examples of programs.
THanks,
ab.
|
|
|
|
|