Mirror Display Driver

Hi.
I’m developing Mirror Display Driver and I have one question that I can’t find answer.
I want to get screen surface (using Eng* functions) without mouse pointer on it.
I only see that driver uses DrvCopyBits and DrvBitBlt to render cursor’s pointer on the surface.
Maybe I need to add somewhere additional flag?
Could anyone can say something about this problem. Please.

Could anyone can say - It’s possible to do this through DrvSetPointerShape/DrvMovePointer or I’m thinking in wrong way?

?

??

xxxxx@gmail.com wrote:

?

xxxxx@gmail.com wrote:

?

Dude, you’ve sent two follow-up posts in just 24 hours demanding a
response. Remember that we all contribute here for free. There’s no
guaranteed response time Some people don’t have this mailing list piped
directly into their brains on a full-time basis. I, for one, don’t read
the list at all on weekends.

In addition, mirror drivers are a very narrow subspecialty. You can’t
expect immediate answers to your questions.

Are you offering to handle all types of cursors, or are you letting the
system handle them? If you don’t offer to handle every cursor, GDI will
fall back to simulating with DrvCopyBits.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

Tim, thank you for your answer.
I’m sorry.

Are you offering to handle all types of cursors, or are you letting the system handle them?
I don’t know exactly. In my driver I implemented graphical function such as DrvBitBlt, DrvTextOut … and inside them I use Eng function to render them on surface.
I see that driver uses DrvCopyBits to draw cursor on the surface.
If you don’t offer to handle every cursor
Could you tell me please. How can I handle every cursor?

Hi.
I’m developing Mirror Display Driver and I got sometimes error BSOD with crush dump error - EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at “0x%08lx” referenced memory at “0x%08lx”. The memory could not be “%s”.
I tested all params and they looked to be correct. So I assume that this conflict may be caused by multiply access to the same memory at the same time.
Does the Mirror Driver use asynchronous or synchronous call method Drv functions?
I mean when the Driver calls for example DrvCopyBits function, can it call another same function before first ends?
Could anyone can say something about this situation, please.

xxxxx@gmail.com wrote:

Hi.
I’m developing Mirror Display Driver and I got sometimes error BSOD with crush dump error - EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at “0x%08lx” referenced memory at “0x%08lx”. The memory could not be “%s”.
I tested all params and they looked to be correct. So I assume that this conflict may be caused by multiply access to the same memory at the same time.
Does the Mirror Driver use asynchronous or synchronous call method Drv functions?
I mean when the Driver calls for example DrvCopyBits function, can it call another same function before first ends?
Could anyone can say something about this situation, please.


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

So you have an access violation… Apparently not all parameters are
correct, something has garbage passed to it.

Question though, without !analyze -v output along with a call stack, how
can anyone really help you?

Matt

I looked at !analyze -v and I’m sure that parameters are correct.
I just want to know. Does the Mirror Driver use asynchronous or synchronous call method Drv functions?

It’s nice that you’re sure that everything is correct, but at least two
of us are not, so if you would, please humor us. I think that the
reason Matt asked for the !analyze, aside from it being the obvious
first step, is that the question you posted doesn’t really make sense,
at least as I read it.

I don’t mean to be critical, but if I recall correctly, you’ve posted
things in the past that would seem to indicate that at the time you had
trouble getting the C mechanics correct to call a function that isn’t
defined in the same source file, and also issues with including
‘NTDDK.H,’ so I have my doubts about about your assessment of !analyze
-v being correct, and whatever you’re experience level, you’re getting a
access violation, so I seriously doubt that there is nothing pertinent
in the information, although that can occur. There’s no shame in any of
this, but either way, if you want help, then you’ve got to play nice.

Please post the !analyze -v, and some source code would be nice as well.

mm

xxxxx@gmail.com wrote:

I looked at !analyze -v and I’m sure that parameters are correct.
I just want to know. Does the Mirror Driver use asynchronous or synchronous call method Drv functions?

xxxxx@gmail.com wrote:

I looked at !analyze -v and I’m sure that parameters are correct.

If that were true, you wouldn’t have generated a general protection fault.

I just want to know. Does the Mirror Driver use asynchronous or synchronous call method Drv functions?

Calls for a single GDI driver surface are serialized. You will never
get a blit request while another blit request is running. Otherwise,
GDI couldn’t guarantee that the display was correct.

If you have multiple surfaces, it’s possible to get multiple calls, but
that doesn’t usually happen.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

>If that were true, you wouldn’t have generated a general protection fault.
I think that I was wrong now. I tested by debugger and.
I see a strange situation. In my driver I use this code to get PPDEV structure.
BOOL DrvCopyBits(
IN SURFOBJ *psoDst,
IN SURFOBJ *psoSrc,
IN CLIPOBJ *pco,
IN XLATEOBJ *pxlo,
IN RECTL *prclDst,
IN POINTL *pptlSrc
)
{
PPDEV ppdev;
if (pco != NULL)
{
ppdev = (PPDEV)psoDst;
}

But when I get ppdev structure I see that ppdev structure and it’s parameters are not nulled but they point to the wrong memory. (I’m sure that ppdev was filled correct in DrvEnableSurface function)
Could anyone can say something about this situation. Please.

I’ve found the problem.
(PPDEV)psoDst->dhpdev;
Sorry.

xxxxx@gmail.com wrote:

> If that were true, you wouldn’t have generated a general protection fault.
>
I think that I was wrong now. I tested by debugger and.
I see a strange situation. In my driver I use this code to get PPDEV structure.
BOOL DrvCopyBits(
IN SURFOBJ *psoDst,
IN SURFOBJ *psoSrc,
IN CLIPOBJ *pco,
IN XLATEOBJ *pxlo,
IN RECTL *prclDst,
IN POINTL *pptlSrc
)
{
PPDEV ppdev;
if (pco != NULL)
{
ppdev = (PPDEV)psoDst;
}

But when I get ppdev structure I see that ppdev structure and it’s parameters are not nulled but they point to the wrong memory. (I’m sure that ppdev was filled correct in DrvEnableSurface function)
Could anyone can say something about this situation. Please.

Is that your EXACT code? Because that’s clearly wrong. The SURFOBJ
*contains* your PPDEV. It’s not the same address as your PPDEV, so you
can’t just cast it. You want:
ppdev = (PPDEV) psoDst->dhpdev;


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.