Hi Anton,
I definitely hope that our efforts are seen as cooperative, not
competitive. Our data showed that ISV lower filter drivers still cause
a large number of bugchecks for customers. The main reasons for these
filters was a burn engine for CD/DVD recording and exclusive access to
the device.
We knew we couldn’t support every format in our first v2 release, so we
looked at the “pain points”. The buffer management portion of the burn
engine was a major source of pain for ISVs, and could be extracted from
the setup/teardown of the stack. This allows (at ISV option) to move to
our buffer management engine (ICDWriteEngine2).
We also heard loud and clear that some software will want to work apart
from our APIs, and therefore we put into the IOCTL for exclusive access
in CDROM. This allows proper coordination between multiple software,
even if not using IMAPIv2, to gain exclusive access to the device.
Again, this is intended to help remove the filter drivers and thus
improve customer experiences and reduce ISV development and maintenance
costs.
Everything we have provided is fully MSDN documented, and fully opt-in.
If you don’t like the APIs, we don’t even ask for you to use them. On
XP, we don’t even have any shell integration to the IMAPIv2 APIs; That
release (which cost us quite a bit of development and testing) was
solely to remove one reason (downlevel API support to XP/Server 2003)
that ISVs would not be able to migrate to IMAPIv2.
If you have specific concerns, please feel free to e-mail ’ optissue at
Microsoft ’ and start a dialogue.
Thanks,
Henry Gabryjelski
Senior Software Development Engineer
US - Windows Device Experience
Microsoft Corporation
From: Anton A. Kolomyeytsev [mailto:xxxxx@rocketdivision.com]
Sent: Wednesday, August 22, 2007 2:05 PM
Subject: RE: MMC Command Read Buffer Capacity
Henry,
this is interesting. Thanks to my background I know it’s virtually
impossible to handle such a hardware in the
“generic” way. So you’d better know something I don’t know J If your
team will manage to have proper hardware support
and be friendly to the users’ feedback I think it’s quite possible to
make optical backup integrated into OS core. The only
thing I’d really hate to see it another round of Microsoft Vs. Stacker
or Microsoft Vs. Netscape. This time Microsoft (with the
free burning API) Vs. Padus & Primo & NuMedia & Rocket Division Software
etc.
Thanks!
Anton
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Henry
Gabryjelski
Sent: Wednesday, August 22, 2007 7:14 PM
To: Windows System Software Devs Interest List
Subject: RE:[ntdev] MMC Command Read Buffer Capacity
Hi Anton,
We’ve worked very hard to find a single code path that works. We
believe we’ve done a very good job of this. We don’t have a hack table,
nor many workarounds in the code, nor any extensibility model.
In addition, the WriteEngine itself has no hacks/workarounds. Our
definition of WriteEngine does not include setup (mode pages, OPC, etc.)
nor finalization (closing tracks/sessions, sync cache, etc.) - it just
does the buffer management during writing. Thus, if we didn’t support a
drive or media type, it would be fairly easy to create an object to
support it:
-
Setup the mode pages, tracks, etc.
-
Have our WriteEngine write the LBA ranges.
-
Perform cleanup tasks as appropriate.
We welcome specific bug reports, via the “optissue at Microsoft” e-mail
address. The more details you provide (INQUIRY data, when it fails,
workarounds if you know them), the more likely that we can integrate a
fix (but never a guarantee).
Hope that helps,
Henry Gabryjelski
Senior Software Development Engineer
US - Windows Device Experience
Microsoft Corporation
From: Anton A. Kolomyeytsev [mailto:xxxxx@rocketdivision.com]
Sent: Tuesday, August 21, 2007 2:25 PM
Subject: RE: MMC Command Read Buffer Capacity
Henry,
this is very impressive! As IMAPI v1 was just a piece of crap J How do
you guys handle different hardware support? Some sort
of the XML thing or do you have “spaghetti code” inside the hardware
abstraction layer? In other words: if I know particular
device with broken firmware needs to synchronize cache in synchronous
way - can I add such a support editing text or XML
file or do I need to tell you guys what to so you’d patch your binary
code in the next release?
Anton
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Henry
Gabryjelski
Sent: Tuesday, August 21, 2007 8:34 PM
To: Windows System Software Devs Interest List
Subject: RE:[ntdev] MMC Command Read Buffer Capacity
…
Re-written from scratch. 100% user-mode, in-process (by default) COM
objects. J The only exception is the global CDROM.SYS implementation
of exclusive access via an IOCTL, which is publicly documented and
exposed (and encouraged) for all to use.
There are still optimizations to be made (i.e. option to avoid
intermediate cache for file system image creation), but it’s (imho) a
decent architecture that will expand to support this easily.
Of particular note: We’ve extracted the write engine (which deals with
buffering and dual-thread FIFO buffer management) as a separate
component from the format-specific writers. This makes it easier to add
support for things we (MSFT) haven’t provided support for yet, without
adding in the cost of needing to write that buffer management strategy
yourself. This is good short-term, as we’ve tested a fairly large set
of devices for compatibility. It’s also good long-term, as new devices
will optimize (and simplify) to this command sequence for buffer
management strategy.
I’m on both this list and watching the MSDN forums (noted on the below
link). However, the forums have pretty much the entire IMAPIv2 dev team
available for specific questions. So, ask away at either location! J
Thanks,
Henry Gabryjelski
Senior Software Development Engineer
US - Windows Device Experience
Microsoft Corporation
From: Anton A. Kolomyeytsev [mailto:xxxxx@rocketdivision.com]
Sent: Monday, August 20, 2007 1:04 PM
Subject: RE: MMC Command Read Buffer Capacity
Are you still using old Roxio code as a basement or is version 2 of the
IMAPI re-written “from the scratch” (as it was supposed to be)?
Thanks!
-a
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Henry
Gabryjelski
Sent: Monday, August 20, 2007 8:45 PM
To: Windows System Software Devs Interest List
Subject: RE:[ntdev] MMC Command Read Buffer Capacity
Welcome to the wonderful(!) world of CD recording software. First, I’d
just like to point out that we have taken a lot of time to help you
avoid dealing with this type of issue. We’ve released a downlevel (to
WinXP) version of IMAPIv2, the optical image mastering API. Details
here:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1974779
http:
This is mostly to help avoid new projects from creeping up. Presuming
that you don’t want to use our solution…
The first cause of the problem you are seeing can occur at the very
start of the write process. Some drives will not start writing until
you “overfill” the buffer once. Thus, you need to send a single extra
write command past that which will fit into the buffer to start the
process going (then wait as the spinup, OPC, etc. occurs).
This problem became much more pronounced with the advent of buffer
underrun free (BUFE bit in Mode Page 2Ah for CD, default for most other
medias) recording. The reason is that, when an underrun condition
occurs and the drive detects that it doesn’t have enough buffer to
continuously write, it will effectively stop writing. See the previous
paragraph for how to get the drive spinning again.
I hope that helps explain the problem you are most likely seeing. Let
us know if this was the cause either way, I’m curious now. 
Thanks,
Henry Gabryjelski
Senior Software Development Engineer
US - Windows Device Experience
Microsoft Corporation
From: Jos Scherders [mailto:xxxxx@home.nl]
Sent: Sunday, August 19, 2007 4:55 PM
Subject: MMC Command Read Buffer Capacity
Hi,
I am debugging a problem we have with our own legacy CD Writing software
which fails on certain CD Writers such as the NEC 3540A. The problems
appears to be related to our use of the MMC command Read Buffer Capacity
(We
use TAO writing and the required features are current). Our software
assumes
that if the “Available Length of Buffer” field returned by the Read
Buffer
Capacity command is non-zero we can continue to write and when it is
zero we
should pause.
Problem is that when using this unit it does not work. It always returns
Zero bytes available even when we wait 10-20 seconds. Also, I used an
analyzer to see what a popular commercial CD Writer package does. This
package just keeps writing even when the Read Buffer Capacity returns 0
bytes free.
Can anyone help me with this and explain how the information returned by
Read Buffer Capacity is supposed to be used ? (I am using this to avoid
overflowing the CD writers buffer cache or this the wrong approach to
begin
with ?)
Really appreciate any help.
Jos
xxxxx@philips.com
—
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
—
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
—
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</http:>