Windows XP と 2000の cdrom.sys の初期化処理の違い
cdrom.sys が呼び出している ClassInitialize について XPと 2000で違いがあったのでまとめてみました。
| Offset | 用途 | 2000 | XP |
| +00 | InitializationDataSize | 0xd4 | 0xd4 |
| +04 | FdoData. DeviceExtensionSize |
0x338 | 0x580 |
| +08 | FdoData. DeviceType |
2(FILE_DEVICE_CD_ROM) | |
| +10 | FdoData. DeviceCharacteristics |
3(FILE_DIRECTORY_FILE | FILE_WRITE_THROUGH) | 0x101(FILE_DIRECTORY_FILE | FILE_COMPLETE_IF_OPLOCKED) |
| +14 | FdoData. ClassError |
NULL | 使用 |
| +18 | FdoData. ClassReadWriteVerification |
使用 | 使用 |
| +1C | FdoData. ClassDeviceControl |
使用 | 使用 |
| +20 | FdoData. ClassShutdownFlush |
NULL | 使用 |
| +24 | FdoData. ClassCreateClose |
NULL | 使用 |
| +28 | FdoData. ClassInitDevice |
使用 | 使用 |
| +2C | FdoData. ClassStartDevice |
使用 | 使用 |
| +30 | FdoData. ClassPowerDevice |
CLASSPNP.SYS!ClassSpinDownPowerHandler | |
| +34 | FdoData. ClassStopDevice |
使用 | 使用 |
| +38 | FdoData. ClassRemoveDevice |
使用 | 使用 |
| : | |||
| +BC | ClassAddDevice | 使用 | 使用 |
| +C8 | ClassStartIo | 使用 | 使用 |
| +CC | ClassUnload | 使用 | 使用 |
| +D0 | ClassTick | 使用 | 使用 |
Windows 2000は、ClassCreateCloseとClassShutdownFlushとClassErrorの処理が無し。
また、DeviceExtensionSizeが大きく異なる事、XPはデバイスの属性がOplock のデッドロック回避のためFILE_COMPLETE_IF_OPLOCKED になってるのが 特徴でした ・ω・


Comments