imweasel
20-02-2005, 09:39
bí quá nên phải vào đây hỏi các bác:
Yêu cầu là viết một WDM driver (chỉ để test trên Win thôi) sao cho khi device nhận được một dữ liệu nào đó thì sẽ notify một app khác để nó đọc dữ liệu vào. Cái này không dùng interrup được vì làm gì có hardware thật mà int, thành ra em dùng event-based:
driver dùng KTimer và CustomeTimerDpc còn ở App thì dùng WaitForSingleObject, có một ví dụ tương tự với NT-driver ở trong DDK, nhưng vấn đề là khi ở trong driver gọi hàm ObReferenceObjectByHandle thì cái routine đấy lại có IRQL ở DISPATCH_LEVEL : (, trong khi yêu cầu gọi hàm ObRef... thì IRQL phải nằm ở PASSIVE_LEVEL. Các bác nào đã gặp rồi chỉ giáo đàn em một cái ?
Em cũng nghĩ đến việc dùng IRP pending rồi, nhưng dùng cái này clean-up khó mà dài, chính Oney cũng recommend nên dùng event-based hơn
Em completely new với cái kernel prog này, cũng chỉ mới bắt đầu đọc được 1 tháng mà vẫn dốt quá, hip hip
Yêu cầu là viết một WDM driver (chỉ để test trên Win thôi) sao cho khi device nhận được một dữ liệu nào đó thì sẽ notify một app khác để nó đọc dữ liệu vào. Cái này không dùng interrup được vì làm gì có hardware thật mà int, thành ra em dùng event-based:
driver dùng KTimer và CustomeTimerDpc còn ở App thì dùng WaitForSingleObject, có một ví dụ tương tự với NT-driver ở trong DDK, nhưng vấn đề là khi ở trong driver gọi hàm ObReferenceObjectByHandle thì cái routine đấy lại có IRQL ở DISPATCH_LEVEL : (, trong khi yêu cầu gọi hàm ObRef... thì IRQL phải nằm ở PASSIVE_LEVEL. Các bác nào đã gặp rồi chỉ giáo đàn em một cái ?
Em cũng nghĩ đến việc dùng IRP pending rồi, nhưng dùng cái này clean-up khó mà dài, chính Oney cũng recommend nên dùng event-based hơn
Em completely new với cái kernel prog này, cũng chỉ mới bắt đầu đọc được 1 tháng mà vẫn dốt quá, hip hip