Sorry, I am trying to not promote my products here or on the newsgroups as
I know this has and does piss people off, but I was asked.
As I work on WinDK for bSquare Corporation, of course I have to
respectfully disagree with Peter, (quite the risky thing to do BTW :).
But, honestly I think this question depends a lot on your needs. If you
want a tool that will get you 0-60 faster than your competition could ever
even think of getting there, use a tool like WinDK. I can generate a fully
functioning WDM driver complete with full Pnp handling and Power management
and start knocking the hardware around in about 2 minutes. Of course a
commercial quality driver takes some time no matter what you do, but the
wizards, samples, and libraries take out soooo much of the crap of writing
drivers it isn’t even funny. I recommend a toolkit for the following
reasons:
a.) It is nearly impossible to find a DDK sample that does what you want,
while toolkits like WinDK provide samples for the latest 3rd party devices
like PLX9054 for PCI, or EZ-Usb by Cypress for USB. And, they provide
samples that do what you want like scatter/gather DMA. Just try to find a
scatter/gather DMA sample in the DDK, I dare you, much less one for a
PLX9054 device.
b.) You get support with WinDK that even on our worst day is better than
the alternative. But, you don’t lose anything with WinDK either, its still
based on the DDK, so all other avenues of support are still available to
help you understand the DDK. WinDK does have its own learning curve to
some degree, but if you are new to drivers, you will get going a whole lot
faster with WinDK and the sample code it provides than with the DDK by
itself. I speak from experience. Besides with our current limited time
low price, ($750 for US customers) what do you have to lose really? There
are no royalties either.
c.) You have sample library and sample driver code to show you how to use
the DDK functions properly. WinDK unlike some of our competitors tries
really hard not to obfuscate or abstract the DDK more than is useful, and
you can use straight DDK calls anywhere in a WinDK driver you like. We
also have setup our C++ classes such that they are as light as possible,
and you can overload just about anything you want. C is harder because it
is C, but you can still customize it anyway you like.
d.) Do you honestly have time on your current project to go in and figure
out how to read/write the registry, create your own device IRP queues,
truly handle Power correctly, handle all of the PNP IRPs correctly, setup
scatter/gather DMA correctly on 98 and 2000, handle
MmGetSystemAddressForMdl correctly on NT4 all service packs, 98, and 2000,
setup your symbolic link and/or device interface correctly, write a test
app for your driver correctly, setup your INF correctly for 98/Me/2000/XP
or your REG file for NT4, or about a hundred other things you may have to
learn to do and that may not be documented well if at all in the DDK, (DDK
documentation is less of a problem now thanks to the bug bash :)?? Why not
get your project out the door and delve deeper into the items you might be
weak on as you have time?
e.) Debugging WinDK code is just as easy as any other driver. I debugged a
WinDK WDM bus driver with two child FDO drivers simultaneously, both C and
C++ versions for each driver, and it wasn’t anymore difficult than
debugging a DDK sample. And, C++ is every bit as easy as C. However, if
you are a C programmer this may not be true for you. But, WinDK offers C
support as well as C++ so take your pick.
f.) We have Wizards to generate a fully building and working driver shell
in C or C++. Our Wizards can generate device or filter drivers for WDM and
NT4 platforms. This alone saves me so much time so as to not even make
this argument worthwhile, but, obviously, I am very familiar with WinDK.
g.) WinDK takes care of a whole bunch of the cross-platform issues between
98 and 2000. With WinDK you can produce a cross-platform binary compatible
WDM driver for USB, 1394, PCI, and others that will work on 98
Gold/98SE/Me/2000/XP. Why try to figure all of this minutia out on your
own? I mean you could, but why?
h.) We have hundreds of users kicking our code around everyday. Your self
created DDK driver is likely to never get that kind of exposure. And we
still find errors! It would be difficult to get the level of reliability
toolkits offer on your own.
I see a lot of posts from people who either have never used a toolkit, or
used a bad one, or missused one (which can happen). Having become familiar
with WinDK, I would never go without a toolkit like this again. It helped
when I didn’t know much, it helped me learn, and it helps more than ever
now that I know the ins and outs of Windows kernel mode drivers. Unlike
MFC, it isn’t a big huge beast that gets in the way, it is a really good
toolkit designed and implemented by some of the best driver developers on
the planet. It does provide all of the usefulness something like MFC
provides in that it takes out a lot of the guesswork and makework in
developing a driver. We have used it on numerous custom contracts
including some that tested the limits pretty darn hard, and WinDK has
always proved to be a big help.
Just my $0.02. BTW, WinDK 3.0 was just released and we have a fully
functional 30-day evaluation version available for free download at:
www.bsquare.com/products/devtools/WinDK
So try it out and try creating a driver for your device and see what you
think for yourself. Compare us against doing it straight DDK, or against
our competition. I will put my money where my mouth is. Good luck!
Bill “I get no commission, bonus or other, if you buy it or not” McKenzie
Software Engineer
bSquare Corporation
On 10/29/01, ““Peter Viscarola” ” wrote:
> > these two things could discuss issues on both the commercial and technical
> advantages and
> > disadvantages of each of them…
>
> Well, I say go with the base DDK.
>
> I have three reasons:
>
> a) If you use an existing toolkit/class library, you’re increasing what you
> have to learn significantly. You’re gonna have to learn how to write
> drivers using the DDK no matter what. If you don’t laern how to write
> drivers the native DDK way you’ll never be able to read any of the DDK
> explanatory material, or any of the books written on NT driver writing. You
> certainly can’t expect whatever company you’re sourcing your toolkit/class
> library from to be able to supply you info on EVERY kind of driver, in EVERY
> situation. Hey, maybe you’d just like to read somebody else’s description
> of what’s going on.
>
> b) If you use the ddk, you have lots of potential assistance: There’s MS
> support, there’s peer help from this forum, there’s The NT Insider, there
> are other forums. With Vendor X’s toolkit/class library you get help from
> Vendor X, and maybe their user group.
>
> c) When you have a tough problem, you’re gonna wind-up debugging YOUR
> driver, and Vendor X’s toolkit/class library code. Sure, the problem is
> almost certainly in your driver, cuz Vendor X has no bugs… let’s assume
> that. But the process of debugging a hard problem is gonna cause you to
> have to walk through Vendor X’s stuff… cuz, after all, it IS ultimately
> Windows that you’re interfacing with and that you need to make happy. You
> new a device object and get back STATUS_UNSUCCESSFUL (or whatever)…
> where’s the problem?
>
> So you see, to be really effective there’s really no way to escape knowing
> the native DDK interface, cuz that’s the interface that the O/S utilizes.
> Might as well make it easy on yourself, and “bite the bullet” and use the
> DDK.
>
> Peter
> OSR
>
>
>
>
> —
> You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
> To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
—
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com