setting Irp->MdlAddress manually

Hi,

I’m handling IOCTL codes within my driver. The IOCTL code uses
METHOD_BUFFERED.
So Irp->MdlAddress=0 by defautl.

But the buffer given via AssociatedIrp.SystemBuffer contains a pointer to
a usermode address.

So I’m creating my own Mdl to access this buffer within my driver.
Am I allowed to assign this manually created Mdl to Irp->MdlAddress, so
that I don’t need to care about unlocking
and freeing the Mdl?

Best Regards
Michael

>But the buffer given via AssociatedIrp.SystemBuffer contains a pointer to a
usermode address.

Just couldn’t imagine how the rest of drivers would survive if this is true.

The SystemBuffer is allocated from NPAGE pool and it’s accessible in
arbitrary context. Are you sure your are receiving the desired IRP?

Calvin Guan, Software Engineer xxxxx@nospam.ati.com
ATI Technologies Inc. Tel: (905) 882-2600 Ext. 8654

— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently subscribed to
ntdev as: xxxxx@ati.com To unsubscribe send a blank email to
xxxxx@lists.osr.com

you can assign it manually, but you should set a completion routine and
free it as the IRP comes back up. Even if I/O would free the MDL for
you now, it’s just cleaner to do it yourself.

You realize that just putting an MDL in the IRP isn’t enough to cause
other drivers to pull the ioctl data from it. They’ll expect a
METHOD_BUFFERED request to contain data in the buffer. If you’re doing
this then you obviously need to transform the command in the IRP as
well.

-p


From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of
xxxxx@sonydadc.com
Sent: Friday, December 19, 2003 9:36 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] setting Irp->MdlAddress manually

Hi,

I’m handling IOCTL codes within my driver. The IOCTL code uses
METHOD_BUFFERED.
So Irp->MdlAddress=0 by defautl.

But the buffer given via AssociatedIrp.SystemBuffer contains a
pointer to a usermode address.

So I’m creating my own Mdl to access this buffer within my
driver.
Am I allowed to assign this manually created Mdl to
Irp->MdlAddress, so that I don’t need to care about unlocking
and freeing the Mdl?

Best Regards
Michael

— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently subscribed
to ntdev as: xxxxx@microsoft.com To unsubscribe send a blank email to
xxxxx@lists.osr.com

I think he means that the contents of the system buffer contain an embedded
pointer which he just “knows” is a user mode address. This is of course
wrong design on many levels. I actually don’t know and don’t care if
manually whacking the Irp.MdlAddress will result in the current version of
the IO Manager cleaning up his mess for him, this approach is also wrong
design on many levels. The OP should consider correct design instead and not
try to be really tricky and lazy.

=====================
Mark Roddy


From: Calvin Guan [mailto:xxxxx@ati.com]
Sent: Friday, December 19, 2003 12:57 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] RE: setting Irp->MdlAddress manually

But the buffer given via AssociatedIrp.SystemBuffer contains a
pointer to a usermode address.

Just couldn’t imagine how the rest of drivers would survive if this
is true.

The SystemBuffer is allocated from NPAGE pool and it’s accessible in
arbitrary context. Are you sure your are receiving the desired IRP?

Calvin Guan, Software Engineer xxxxx@nospam.ati.com
ATI Technologies Inc. Tel: (905) 882-2600 Ext. 8654

— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently subscribed to
ntdev as: xxxxx@ati.com To unsubscribe send a blank email to
xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@stratus.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Hi Calvin,

Thanks for your reply.

AssociatedIrp.SystemBuffer is not a usermode address but the data
(structure) it points to (its filled during the user mode call of
DeviceIoControl),
contains a pointer, which points to a usermode address.

Best Regards
Michael

Calvin Guan
Sent by: xxxxx@lists.osr.com
19.12.2003 18:56
Please respond to
“Windows System Software Devs Interest List”

To
“Windows System Software Devs Interest List”
cc

Subject
[ntdev] RE: setting Irp->MdlAddress manually

>But the buffer given via AssociatedIrp.SystemBuffer contains a pointer to
a usermode address.
Just couldn’t imagine how the rest of drivers would survive if this is
true.
The SystemBuffer is allocated from NPAGE pool and it’s accessible in
arbitrary context. Are you sure your are receiving the desired IRP?
Calvin Guan, Software Engineer xxxxx@nospam.ati.com
ATI Technologies Inc. Tel: (905) 882-2600 Ext. 8654
— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently subscribed
to ntdev as: xxxxx@ati.com To unsubscribe send a blank email to
xxxxx@lists.osr.com

Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@sonydadc.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Hi Peter,

Thanks for your reply.

I see, so I will take care of my Mdl myself.

Regards
Michael

“Peter Wieland”
Sent by: xxxxx@lists.osr.com
19.12.2003 19:04
Please respond to
“Windows System Software Devs Interest List”

To
“Windows System Software Devs Interest List”
cc

Subject
[ntdev] RE: setting Irp->MdlAddress manually

you can assign it manually, but you should set a completion routine and
free it as the IRP comes back up. Even if I/O would free the MDL for
you now, it’s just cleaner to do it yourself.

You realize that just putting an MDL in the IRP isn’t enough to cause
other drivers to pull the ioctl data from it. They’ll expect a
METHOD_BUFFERED request to contain data in the buffer. If you’re doing
this then you obviously need to transform the command in the IRP as
well.

-p

________________________________

From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of
xxxxx@sonydadc.com
Sent: Friday, December 19, 2003 9:36 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] setting Irp->MdlAddress manually

Hi,

I’m handling IOCTL codes within my driver. The IOCTL code
uses
METHOD_BUFFERED.
So Irp->MdlAddress=0 by defautl.

But the buffer given via AssociatedIrp.SystemBuffer
contains a
pointer to a usermode address.

So I’m creating my own Mdl to access this buffer within
my
driver.
Am I allowed to assign this manually created Mdl to
Irp->MdlAddress, so that I don’t need to care about unlocking
and freeing the Mdl?

Best Regards
Michael

— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently subscribed
to ntdev as: xxxxx@microsoft.com To unsubscribe send a blank email to
xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@sonydadc.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Michael,

I read you post wrong:-).

Anyways, as Mark suggested, you may consider alternatives.

In your approach, you will be fine if your driver is at the top of the
driver stack or your dispatch routine is called in the context or the thread
where you put the user address and invoke the IOCTL.

If your dispatch routine is called in an arbitrary context, then the user
address will have different meanings.

Calvin Guan, Software Engineer xxxxx@nospam.ati.com
ATI Technologies Inc. Tel: (905) 882-2600 Ext. 8654

-----Original Message-----
From: xxxxx@sonydadc.com [mailto:xxxxx@sonydadc.com]
Sent: Friday, December 19, 2003 1:15 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] RE: setting Irp->MdlAddress manually

Hi Calvin,

Thanks for your reply.

AssociatedIrp.SystemBuffer is not a usermode address but the data
(structure) it points to (its filled during the user mode call of
DeviceIoControl),
contains a pointer, which points to a usermode address.

Best Regards
Michael

Calvin Guan
Sent by: xxxxx@lists.osr.com
19.12.2003 18:56 Please respond to
“Windows System Software Devs Interest List”

To"Windows System Software Devs Interest List"
cc
Subject[ntdev] RE: setting Irp->MdlAddress manually

>But the buffer given via AssociatedIrp.SystemBuffer contains a pointer to a
usermode address.
Just couldn’t imagine how the rest of drivers would survive if this is true.

The SystemBuffer is allocated from NPAGE pool and it’s accessible in
arbitrary context. Are you sure your are receiving the desired IRP?
Calvin Guan, Software Engineer xxxxx@nospam.ati.com
ATI Technologies Inc. Tel: (905) 882-2600 Ext. 8654
— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently subscribed to
ntdev as: xxxxx@ati.com To unsubscribe send a blank email to
xxxxx@lists.osr.com

Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@sonydadc.com
To unsubscribe send a blank email to xxxxx@lists.osr.com
— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently subscribed to
ntdev as: xxxxx@ati.com To unsubscribe send a blank email to
xxxxx@lists.osr.com

Mark,
Is it a questionable design to embedd a (usermode) buffer within another
buffer?
Or is it just questionable to assume it’s a usermode buffer?

Best Regards
Michael

“Roddy, Mark”
Sent by: xxxxx@lists.osr.com
19.12.2003 19:14
Please respond to
“Windows System Software Devs Interest List”

To
“Windows System Software Devs Interest List”
cc

Subject
[ntdev] RE: setting Irp->MdlAddress manually

I think he means that the contents of the system buffer contain an
embedded
pointer which he just “knows” is a user mode address. This is of course
wrong design on many levels. I actually don’t know and don’t care if
manually whacking the Irp.MdlAddress will result in the current version of
the IO Manager cleaning up his mess for him, this approach is also wrong
design on many levels. The OP should consider correct design instead and
not
try to be really tricky and lazy.

=====================
Mark Roddy

________________________________

From: Calvin Guan [mailto:xxxxx@ati.com]
Sent: Friday, December 19, 2003 12:57 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] RE: setting Irp->MdlAddress manually

>But the buffer given via AssociatedIrp.SystemBuffer
contains a
pointer to a usermode address.

Just couldn’t imagine how the rest of drivers would
survive if this
is true.

The SystemBuffer is allocated from NPAGE pool and it’s
accessible in
arbitrary context. Are you sure your are receiving the desired IRP?

Calvin Guan, Software Engineer xxxxx@nospam.ati.com
ATI Technologies Inc. Tel: (905) 882-2600 Ext. 8654

— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently subscribed
to
ntdev as: xxxxx@ati.com To unsubscribe send a blank email to
xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as:
xxxxx@stratus.com
To unsubscribe send a blank email to
xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@sonydadc.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

At my age your html fonts are a challenge :slight_smile:

Yes it is hugely questionable design to embed user mode pointers in
IRP-based data buffers. (In fact it is generally wrong to embed any
pointers, user mode or otherwise, in the IRP data.) There are a lot of
issues that you now have to deal with that I suspect you are best only
faintly aware of. Worse, you can ignore all of the issues and your design
will appear to work quite well, until of course it doesn’t, which will
typically be at Very Important Customer, Inc.'s corporate headquarters while
both your CEO and VIC’s CEO are present. See Bill Gates and his infamous
Win98 demo. Murphy operative.

The NT model is to marshall your data structures into the buffer constructed
for delivery to kernel mode components.


From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of
xxxxx@sonydadc.com
Sent: Monday, December 22, 2003 3:46 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] RE: setting Irp->MdlAddress manually

Mark,

Is it a questionable design to embedd a (usermode) buffer within
another buffer?
Or is it just questionable to assume it’s a usermode buffer?

Best Regards
Michael

“Roddy, Mark”
Sent by: xxxxx@lists.osr.com

19.12.2003 19:14
Please respond to
“Windows System Software Devs Interest List”

To
“Windows System Software Devs Interest List”

cc

Subject
[ntdev] RE: setting Irp->MdlAddress manually

I think he means that the contents of the system buffer contain an
embedded
pointer which he just “knows” is a user mode address. This is of
course
wrong design on many levels. I actually don’t know and don’t care if
manually whacking the Irp.MdlAddress will result in the current
version of
the IO Manager cleaning up his mess for him, this approach is also
wrong
design on many levels. The OP should consider correct design instead
and not
try to be really tricky and lazy.

=====================
Mark Roddy

________________________________

From: Calvin Guan [mailto:xxxxx@ati.com]
Sent: Friday, December 19, 2003 12:57 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] RE: setting Irp->MdlAddress
manually

>But the buffer given via AssociatedIrp.SystemBuffer
contains a
pointer to a usermode address.

Just couldn’t imagine how the rest of drivers would
survive if this
is true.

The SystemBuffer is allocated from NPAGE pool and
it’s accessible in
arbitrary context. Are you sure your are receiving the desired IRP?

Calvin Guan, Software Engineer xxxxx@nospam.ati.com
ATI Technologies Inc. Tel: (905) 882-2600 Ext. 8654

— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently
subscribed to
ntdev as: xxxxx@ati.com To unsubscribe send a blank email to
xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as:
xxxxx@stratus.com
To unsubscribe send a blank email to
xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@sonydadc.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

— Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256 You are currently subscribed to
ntdev as: xxxxx@hollistech.com To unsubscribe send a blank email to
xxxxx@lists.osr.com

I think I’ve figured
out how to do this. Now I can have fun with HTML-formatted messages, too.

Mark Roddy wrote:

At my age your html fonts are a challenge :slight_smile:

 

Walter,
If the consulting thing dries up, I guess you’re all set for used car
website design :-).

Happy Holidays!
Chris Myers
Engineering Manager
Quatech, Inc.

-----Original Message-----
From: Walter Oney [mailto:xxxxx@oneysoft.com]
Sent: Monday, December 22, 2003 11:35 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] Re: setting Irp->MdlAddress manually

I think I’ve figured out how to do this. Now I can have fun with
HTML-formatted messages, too.

Mark Roddy wrote:

At my age your html fonts are a challenge :slight_smile:


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@quatech.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

If you can read this you are a better man than me.

=====================
Mark Roddy


From: Walter Oney [mailto:xxxxx@oneysoft.com]
Sent: Monday, December 22, 2003 11:35 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] Re: setting Irp->MdlAddress manually

I think I’ve figured out how to do this. Now I can have fun with
HTML-formatted messages, too.

Mark Roddy wrote:

At my age your html fonts are a challenge :slight_smile:


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@stratus.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Select the text in order to read :slight_smile:

BTW: The background is not red enough :slight_smile:

Regards,
Yan Vugenfirer
Senior Software Engineer
Smart Link Ltd.

-----Original Message-----
From: Roddy, Mark [mailto:xxxxx@stratus.com]
Sent: Monday, December 22, 2003 7:15 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] Re: setting Irp->MdlAddress manually

If you can read this you are a better man than me.

=====================
Mark Roddy


From: Walter Oney [mailto:xxxxx@oneysoft.com]
Sent: Monday, December 22, 2003 11:35 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] Re: setting Irp->MdlAddress manually

I think I’ve figured out how to do this. Now I can have fun with HTML-formatted messages, too.

Mark Roddy wrote:

At my age your html fonts are a challenge :slight_smile:


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@stratus.com
To unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@smlink.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

I’ll be damned … I could not figure what you people were talking about
until I decided to reply to this thread. Now I see the HTML. But then I have
“Plain text” set in Outlook Express and it does not show HTML until I reply.
A quick select all and then Format->Plain text removes the bullshit (defined
as HTML) from the message.


Gary G. Little
Seagate Technologies, LLC

“yan” wrote in message news:xxxxx@ntdev…
Select the text in order to read :slight_smile:

BTW: The background is not red enough :slight_smile:

Regards,
Yan Vugenfirer
Senior Software Engineer
Smart Link Ltd.

-----Original Message-----
From: Roddy, Mark [mailto:xxxxx@stratus.com]
Sent: Monday, December 22, 2003 7:15 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] Re: setting Irp->MdlAddress manually

If you can read this you are a better man than me.

=====================
Mark Roddy

From: Walter Oney [mailto:xxxxx@oneysoft.com]
Sent: Monday, December 22, 2003 11:35 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] Re: setting Irp->MdlAddress manually

I think I’ve figured out how to do this. Now I can have fun with
HTML-formatted messages, too.
Mark Roddy wrote:
At my age your html fonts are a challenge :slight_smile:


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@stratus.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@smlink.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

I can do better. This gets to be more and more fun. I can’t even read my own post. I did discover that if I highlight it, it becomes a little readable, except for the size and my eyes.

“Walter Oney” wrote in message news:xxxxx@ntdev…
> I think I’ve figured out how to do this. Now I can have fun with HTML-formatted messages, too.
> Mark Roddy wrote:
>
> At my age your html fonts are a challenge :slight_smile:
>

Walter did forget the blinking. Need bright red background with it
blinking at 30cps or is it 60cps (Hz)?

“Gary G. Little” wrote in message
news:xxxxx@ntdev…
>
> I’ll be damned … I could not figure what you people were talking
about
> until I decided to reply to this thread. Now I see the HTML. But then
I have
> “Plain text” set in Outlook Express and it does not show HTML until I
reply.
> A quick select all and then Format->Plain text removes the bullshit
(defined
> as HTML) from the message.
>
> –
> Gary G. Little
> Seagate Technologies, LLC
>
> “yan” wrote in message news:xxxxx@ntdev…
> Select the text in order to read :slight_smile:
>
> BTW: The background is not red enough :slight_smile:
>
> Regards,
> Yan Vugenfirer
> Senior Software Engineer
> Smart Link Ltd.
>
> -----Original Message-----
> From: Roddy, Mark [mailto:xxxxx@stratus.com]
> Sent: Monday, December 22, 2003 7:15 PM
> To: Windows System Software Devs Interest List
> Subject: [ntdev] Re: setting Irp->MdlAddress manually
>
>
> If you can read this you are a better man than me.
>
>
>
> =====================
> Mark Roddy
>
>
>
>
>
>
> From: Walter Oney [mailto:xxxxx@oneysoft.com]
> Sent: Monday, December 22, 2003 11:35 AM
> To: Windows System Software Devs Interest List
> Subject: [ntdev] Re: setting Irp->MdlAddress manually
>
>
> I think I’ve figured out how to do this. Now I can have fun with
> HTML-formatted messages, too.
> Mark Roddy wrote:
> At my age your html fonts are a challenge :slight_smile:
>
> —
> Questions? First check the Kernel Driver FAQ at
> http://www.osronline.com/article.cfm?id=256
>
> You are currently subscribed to ntdev as: xxxxx@stratus.com
> To unsubscribe send a blank email to xxxxx@lists.osr.com
> —
> Questions? First check the Kernel Driver FAQ at
> http://www.osronline.com/article.cfm?id=256
>
> You are currently subscribed to ntdev as: xxxxx@smlink.com
> To unsubscribe send a blank email to xxxxx@lists.osr.com
>
>
>
>

Good trick. After I selected Walter’s text and pasted it into a standard editor
to kill the horrible font, I could read it.

yan wrote:

Select the text in order to read :slight_smile:


If replying by e-mail, please remove “nospam.” from the address.

James Antognini
Windows DDK MVP

James you can reply to the message and change the format the plain text.
Works just as well and you can discard the reply, but if someone wants
help, I won’t answer them. It shows too much stupidity for me to try
and get through to them.

“James Antognini” wrote in message
news:xxxxx@ntdev…
>
> Good trick. After I selected Walter’s text and pasted it into a
standard editor
> to kill the horrible font, I could read it.
>
> yan wrote:
>
> > Select the text in order to read :slight_smile:
>
> –
> If replying by e-mail, please remove “nospam.” from the address.
>
> James Antognini
> Windows DDK MVP
>
>
>
>

Yeah … the overall rule of thumb when posting to a free forum is “Do not
makest thyself into a pain in the ass.”


Gary G. Little
Seagate Technologies, LLC

“David J. Craig” wrote in message
news:xxxxx@ntdev…
>
> James you can reply to the message and change the format the plain text.
> Works just as well and you can discard the reply, but if someone wants
> help, I won’t answer them. It shows too much stupidity for me to try
> and get through to them.
>
> “James Antognini” wrote in message
> news:xxxxx@ntdev…
> >
> > Good trick. After I selected Walter’s text and pasted it into a
> standard editor
> > to kill the horrible font, I could read it.
> >
> > yan wrote:
> >
> > > Select the text in order to read :slight_smile:
> >
> > –
> > If replying by e-mail, please remove “nospam.” from the address.
> >
> > James Antognini
> > Windows DDK MVP
> >
> >
> >
> >
>
>
>
>

“Gary G. Little” wrote:

Yeah … the overall rule of thumb when posting to a free forum is “Do not
makest thyself into a pain in the ass.”

[Ed: “maketh”. As in, “Avoid pedantic corrections to other people’s word
choices.”]


Walter Oney, Consulting and Training
Basic and Advanced Driver Programming Seminars
Check out our schedule at http://www.oneysoft.com