- IRQL ಮರಣದಂಡನೆ ಆದ್ಯತೆಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ ಮತ್ತು ಮಟ್ಟದ ಮೂಲಕ ಅಡಚಣೆಗಳನ್ನು ಮರೆಮಾಡುತ್ತದೆ, DISPATCH ಮೇಲೆ ಅದು ಥ್ರೆಡ್ ಆದ್ಯತೆಯನ್ನಲ್ಲ, IRQL ಅನ್ನು ಆದೇಶಿಸುತ್ತದೆ.
- ದಿ ಬಿಎಸ್ಒಡಿ 0xA/0xD1 ಸಾಮಾನ್ಯವಾಗಿ ಹೆಚ್ಚಿನ IRQL ನಲ್ಲಿ ಪೇಜ್ ಮಾಡಬಹುದಾದ ಅಥವಾ ಅಮಾನ್ಯ ಮೆಮೊರಿಗೆ ಪ್ರವೇಶಗಳು ಮತ್ತು ತಪ್ಪಾದ ವಿಳಾಸಗಳು ಅಥವಾ ಪೇಜ್ ಮಾಡಬಹುದಾದ ಕೋಡ್ನಿಂದ ಉಂಟಾಗುತ್ತದೆ.
- WinDbg ಮತ್ತು ಡ್ರೈವರ್ ವೆರಿಫೈಯರ್ ಪ್ರಮುಖವಾಗಿವೆ: !analyze, !irql, ln, .trap, !pool, !address ಬಳಸಿ ಮತ್ತು 1, 3 ಮತ್ತು 4 ನಿಯತಾಂಕಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ.
- En ಚಾಲಕರು, ಹೆಚ್ಚಿನ IRQL ನಲ್ಲಿ ಪುಟ ದೋಷಗಳನ್ನು ತಡೆಯುತ್ತದೆ, ಪುಟವಿಲ್ಲದ ಮೆಮೊರಿ ಮತ್ತು ಸ್ಪಿನ್ ಲಾಕ್ಗಳನ್ನು ಬಳಸುತ್ತದೆ; ಬಳಕೆದಾರರಿಗೆ, ಸಮಸ್ಯಾತ್ಮಕ ಡ್ರೈವರ್ಗಳನ್ನು ನವೀಕರಿಸುತ್ತದೆ/ಪ್ರತ್ಯೇಕಿಸುತ್ತದೆ.
ನೀವು ಎಂದಾದರೂ ಈ ರೀತಿಯ ಸಂದೇಶಗಳನ್ನು ಹೊಂದಿರುವ ನೀಲಿ ಪರದೆಯನ್ನು ನೋಡಿದ್ದರೆ IRQL_NOT_LESS_OR_EQUAL o ಚಾಲಕ_IRQL_ಅಲ್ಲ_ಕಡಿಮೆ_ಅಥವಾ_ಸಮಾನ, ನೀವು ಬಹುಶಃ ಚಾಲಕರ ಪ್ರಪಂಚದ ಹೊರಗೆ ಹೆಚ್ಚು ತಿಳಿದಿಲ್ಲದ ಪರಿಕಲ್ಪನೆಯನ್ನು ನೋಡಿರಬಹುದು: IRQL (ಇಂಟರಪ್ಟ್ ರಿಕ್ವೆಸ್ಟ್ ಲೆವೆಲ್). ವಿಂಡೋಸ್, ವ್ಯವಸ್ಥೆಯು ಒಂದು ನಿರ್ದಿಷ್ಟ ಮಿತಿಗಿಂತ ಹೆಚ್ಚಿರುವಾಗ ಈ ಮಟ್ಟದ ಅಡಚಣೆ ಆದ್ಯತೆಯು ಥ್ರೆಡ್ ಆದ್ಯತೆಗಿಂತ ಆದ್ಯತೆಯನ್ನು ಪಡೆಯುತ್ತದೆ ಮತ್ತು ಇದು ಸ್ಥಿರತೆಯ ಮೇಲೆ ನೇರ ಪರಿಣಾಮಗಳನ್ನು ಬೀರುತ್ತದೆ.
ಮುಂದಿನ ಸಾಲುಗಳಲ್ಲಿ ನೀವು ಕಂಡುಕೊಳ್ಳುವಿರಿ una ಸಂಪೂರ್ಣ ಮಾರ್ಗದರ್ಶಿ ಮತ್ತು IRQL ಎಂದರೇನು, ಅದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂಬುದರ ಕುರಿತು ಸ್ಪೇನ್ನಿಂದ ಸ್ಪ್ಯಾನಿಷ್ನಲ್ಲಿ, ಅದು ನೀಲಿ ಪರದೆಗಳನ್ನು ಏಕೆ ಪ್ರಚೋದಿಸುತ್ತದೆ, WinDbg ಯೊಂದಿಗೆ ಸಮಸ್ಯೆಯನ್ನು ಹೇಗೆ ನಿರ್ಣಯಿಸುವುದು ಮತ್ತು ನೀವು ದೋಷವನ್ನು ಅನುಭವಿಸುತ್ತಿರುವ ಬಳಕೆದಾರರಾಗಿದ್ದರೆ ಅಥವಾ ಕರ್ನಲ್-ಮೋಡ್ ಡ್ರೈವರ್ಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುತ್ತಿದ್ದರೆ ಏನು ಮಾಡಬೇಕು. ವ್ಯವಹಾರಕ್ಕೆ ಇಳಿಯೋಣ.
ವಿಂಡೋಸ್ನಲ್ಲಿ IRQL (ಇಂಟರಪ್ಟ್ ರಿಕ್ವೆಸ್ಟ್ ಲೆವೆಲ್) ಎಂದರೇನು?
ವಿಂಡೋಸ್ ನಲ್ಲಿ, ದಿ IRQL ಇದರ ಆದ್ಯತೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ ಹಾರ್ಡ್ವೇರ್ ಪ್ರೊಸೆಸರ್ ಎಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಯಾವುದೇ ಸಮಯದಲ್ಲಿ. ವಿಂಡೋಸ್ ಡ್ರೈವರ್ ಮಾಡೆಲ್ (WDM) ನಲ್ಲಿ, ಕಡಿಮೆ IRQL ನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಕೋಡ್ ಅನ್ನು ಹೆಚ್ಚಿನ IRQL ನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಕೋಡ್ ಅಡ್ಡಿಪಡಿಸಬಹುದು. ವಾಸ್ತವವಾಗಿ, ಒಂದೇ ಮಲ್ಟಿ-ಕೋರ್ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ, ಪ್ರತಿ CPU ವಿಭಿನ್ನ IRQL ನಲ್ಲಿರಬಹುದು, ಇದು ಸಿಂಕ್ರೊನೈಸೇಶನ್ ಅನ್ನು ಸಂಕೀರ್ಣಗೊಳಿಸುತ್ತದೆ.
ಒಂದು ಪ್ರಮುಖ ನಿಯಮವಿದೆ: PASSIVE_LEVEL ಗಿಂತ ಹೆಚ್ಚಿನ IRQL ನಲ್ಲಿ CPU ಚಾಲನೆಯಲ್ಲಿರುವಾಗ, ಇನ್ನೂ ಹೆಚ್ಚಿನ IRQL ನಲ್ಲಿನ ಚಟುವಟಿಕೆಯಿಂದ ಮಾತ್ರ ಅದನ್ನು ಪೂರ್ವಭಾವಿಯಾಗಿ ಮಾಡಬಹುದು.ಇದು ಬಳಕೆದಾರ ಕೋಡ್, ಕರ್ನಲ್ ಕಾರ್ಯಗಳು, ಡಿಫರ್ಡ್ ಕಾಲರ್ಗಳು (DPC ಗಳು), ಮತ್ತು ಸಾಧನ ಇಂಟರಪ್ಟ್ ಸರ್ವಿಸ್ ರೂಟೀನ್ಗಳು (ISR ಗಳು) ನಡುವಿನ ಸಹಬಾಳ್ವೆಯನ್ನು ಸಂಘಟಿಸುತ್ತದೆ.
ಹಂತಗಳು ಮತ್ತು ಆದ್ಯತೆಗಳು: PASSIVE_LEVEL, APC_LEVEL, DISPATCH_LEVEL ಮತ್ತು DIRQL
ಸಾಮಾನ್ಯವಾಗಿ ಹೇಳುವುದಾದರೆ, x86 ನಲ್ಲಿ, 0 ಮತ್ತು 31 ರ ನಡುವಿನ IRQL ಮೌಲ್ಯಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ; x64 ನಲ್ಲಿ, 0 ಮತ್ತು 15 ರ ನಡುವೆಪ್ರಾಯೋಗಿಕ ಅರ್ಥ ಒಂದೇ: IRQL 0 (PASSIVE_LEVEL) ಎಂದರೆ ಸಾಮಾನ್ಯ ಬಳಕೆದಾರ ಕೋಡ್ ಮತ್ತು ಅನೇಕ ಚಾಲಕ ಕಾರ್ಯಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ; APC ಮತ್ತು ಪುಟ ದೋಷಗಳು ಅವುಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ IRQL 1 (APC_LEVEL) ಗೆ ಮ್ಯಾಪ್ ಮಾಡಲಾಗುತ್ತದೆ; IRQL 2 (DISPATCH_LEVEL) ಥ್ರೆಡ್ ಶೆಡ್ಯೂಲರ್ ಮತ್ತು DPC ಗಳನ್ನು ಒಳಗೊಳ್ಳುತ್ತದೆ. DISPATCH_LEVEL ಮೇಲೆ ಸಾಧನ ಅಡಚಣೆಗಳಿಗೆ (DIRQL ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ) ಮತ್ತು HIGH_LEVEL ನಂತಹ ಇತರ ಆಂತರಿಕ ಬಳಕೆಗಳಿಗೆ ಮೀಸಲಾದ ಹಂತಗಳಿವೆ.
ಚಾಲಕ ಪರಿಸರ ವ್ಯವಸ್ಥೆಯಲ್ಲಿ, DISPATCH_LEVEL ನಲ್ಲಿ ಅನೇಕ ಸಾಮಾನ್ಯ ದಿನಚರಿಗಳನ್ನು ರನ್ ಮಾಡಲಾಗುತ್ತದೆ.: ಉದಾಹರಣೆಗೆ, DPC ಮತ್ತು StartIo. ಈ ವಿನ್ಯಾಸವು ಅವುಗಳಲ್ಲಿ ಒಂದು ಆಂತರಿಕ ಸರತಿ ಸಾಲುಗಳನ್ನು ಅಥವಾ ಇತರ ಹಂಚಿಕೆಯ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಸ್ಪರ್ಶಿಸುತ್ತಿರುವಾಗ, ಅದೇ ಮಟ್ಟದಲ್ಲಿ ಮತ್ತೊಂದು ದಿನಚರಿಯು ಆ CPU ನಲ್ಲಿ ಅದನ್ನು ಪೂರ್ವಭಾವಿಯಾಗಿ ಮಾಡುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಪೂರ್ವಭಾವಿ ನಿಯಮವು ಉನ್ನತ ಹಂತಗಳಲ್ಲಿ ಮಾತ್ರ ಅಡಚಣೆಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ.
DISPATCH_LEVEL ಮತ್ತು ಪ್ರೊಫೈಲಿಂಗ್/ಉನ್ನತ ಮಟ್ಟಗಳ ನಡುವೆ ಸ್ಥಳವಿದೆ ಪ್ರತಿಯೊಂದು ಸಾಧನದ ಹಾರ್ಡ್ವೇರ್ ಅಡಚಣೆಗಳು (DIRQL)ಒಂದು ಸಾಧನದ IRQL ಇತರ ಸಾಧನಗಳಿಗಿಂತ ಅದರ ಆದ್ಯತೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ. IRP_MN_START_DEVICE ನೊಂದಿಗೆ IRP_MJ_PNP ಸಮಯದಲ್ಲಿ WDM ಚಾಲಕವು ಈ IRQL ಅನ್ನು ಪಡೆಯುತ್ತದೆ. ಈ ಸಾಧನ IRQL ಜಾಗತಿಕ, ಸ್ಥಿರ ಮೌಲ್ಯವಲ್ಲ, ಬದಲಿಗೆ ನಿರ್ದಿಷ್ಟ ಅಡಚಣೆ ರೇಖೆಯೊಂದಿಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಮೌಲ್ಯವಾಗಿದೆ.
IRQL vs. ಥ್ರೆಡ್ ಪ್ರಿಯಾರಿಟಿ
ಪರಿಕಲ್ಪನೆಗಳನ್ನು ಗೊಂದಲಗೊಳಿಸದಿರುವುದು ಒಳ್ಳೆಯದು: ಶೆಡ್ಯೂಲರ್ ಯಾವಾಗ ಪೂರ್ವಭಾವಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಾನೆ ಮತ್ತು ಯಾವ ಥ್ರೆಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಥ್ರೆಡ್ ಆದ್ಯತೆ ನಿರ್ಧರಿಸುತ್ತದೆ.; ಯಾವ ರೀತಿಯ ಚಟುವಟಿಕೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು ಮತ್ತು ಯಾವ ಅಡಚಣೆಗಳನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ ಎಂಬುದನ್ನು IRQL ನಿಯಂತ್ರಿಸುತ್ತದೆ. DISPATCH_LEVEL ಮೇಲೆ, ಯಾವುದೇ ಥ್ರೆಡ್ ಸ್ವಿಚಿಂಗ್ ಇಲ್ಲ: ಇದು ಥ್ರೆಡ್ ಆದ್ಯತೆಯಲ್ಲ, IRQL ನಿಯಂತ್ರಿಸುತ್ತದೆ.
IRQL ಮತ್ತು ಪೇಜಿಂಗ್: ನೀವು ಏನು ಮಾಡಬಾರದು
IRQL ಅನ್ನು ಹೆಚ್ಚಿಸುವುದರ ತಕ್ಷಣದ ಪರಿಣಾಮವೆಂದರೆ ವ್ಯವಸ್ಥೆ ಪುಟ ದೋಷಗಳನ್ನು ನಿಭಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.. ಸುವರ್ಣ ನಿಯಮ: DISPATCH_LEVEL ಅಥವಾ ಅದಕ್ಕಿಂತ ಹೆಚ್ಚಿನದರಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಕೋಡ್ ಪುಟ ದೋಷಗಳಿಗೆ ಕಾರಣವಾಗುವುದಿಲ್ಲ. ಪ್ರಾಯೋಗಿಕವಾಗಿ, ಇದರರ್ಥ ಆ ದಿನಚರಿ ಮತ್ತು ಅವು ಸ್ಪರ್ಶಿಸುವ ಡೇಟಾ ಪುಟರಹಿತ ಸ್ಮರಣೆಯಲ್ಲಿ ಇರಬೇಕು. ಇದರ ಜೊತೆಗೆ, ಕೆಲವು ಕರ್ನಲ್ ಸಹಾಯಕರು IRQL ಆಧರಿಸಿ ತಮ್ಮ ಬಳಕೆಯನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತಾರೆ: ಉದಾಹರಣೆಗೆ, KeWaitForSingleObject
ನೀವು ನಿರ್ಬಂಧಿಸದಿದ್ದರೆ ಮಾತ್ರ DISPATCH_LEVEL ಅನ್ನು ಕರೆಯಬಹುದು (ಶೂನ್ಯ ಕಾಲಾವಧಿ), ಮತ್ತು ಶೂನ್ಯವಲ್ಲದ ಕಾಲಾವಧಿಗಳಿಗೆ, ನೀವು DISPATCH_LEVEL ಗಿಂತ ಕಡಿಮೆ ಇರಬೇಕು.
IRQL ನ ಸೂಚ್ಯ ಮತ್ತು ಸ್ಪಷ್ಟ ನಿಯಂತ್ರಣ
ಹೆಚ್ಚಿನ ಸಮಯ, ವ್ಯವಸ್ಥೆಯು ನಿಮ್ಮ ದಿನಚರಿಗಳನ್ನು ಸರಿಯಾದ IRQL ನಲ್ಲಿ ಆಹ್ವಾನಿಸುತ್ತದೆ. ಅವರು ಏನು ಮಾಡಬೇಕು ಎಂಬುದರ ಕುರಿತು. IRP ಗಳಿಗಾಗಿ ಡಿಸ್ಪ್ಯಾಚ್ ರೂಟೀನ್ಗಳು PASSIVE_LEVEL ನಲ್ಲಿ ರನ್ ಆಗುತ್ತವೆ (ಅವರು ಯಾವುದೇ ಸಹಾಯಕರನ್ನು ನಿರ್ಬಂಧಿಸಬಹುದು ಅಥವಾ ಕರೆಯಬಹುದು), StartIo ಮತ್ತು DPC ಹಂಚಿಕೆಯ ಕ್ಯೂಗಳನ್ನು ರಕ್ಷಿಸಲು DISPATCH_LEVEL ನಲ್ಲಿ ರನ್ ಆಗುತ್ತವೆ ಮತ್ತು ISR ಗಳು DIRQL ನಲ್ಲಿ ರನ್ ಆಗುತ್ತವೆ.
ನೀವು ಅದನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ನಿಯಂತ್ರಿಸಬೇಕಾದರೆ, ನೀವು IRQL ಅನ್ನು ಹೆಚ್ಚಿಸಬಹುದು ಮತ್ತು ಕಡಿಮೆ ಮಾಡಬಹುದು KeRaiseIrql
y KeLowerIrql
ಬಹಳ ಬಳಸಿದ ಒಂದು ಶಾರ್ಟ್ಕಟ್ ಇದೆ: KeRaiseIrqlToDpcLevel()
ಹಿಂದಿನ IRQL ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮನ್ನು DISPATCH_LEVEL ನಲ್ಲಿ ಬಿಡುತ್ತದೆ. ಮುಖ್ಯ: ಸಿಸ್ಟಮ್ ನಿಮ್ಮನ್ನು ಕರೆದಾಗ IRQL ಇದ್ದ ಮೌಲ್ಯಕ್ಕಿಂತ ಕೆಳಕ್ಕೆ ಎಂದಿಗೂ ಇಳಿಸಬೇಡಿ; ಆ ಸಿಂಕ್ರೊನೈಸೇಶನ್ ಅನ್ನು ಮುರಿಯುವುದರಿಂದ ತುಂಬಾ ಗಂಭೀರವಾದ ರೇಸ್ ವಿಂಡೋಗಳು ತೆರೆಯಬಹುದು.
IRQL-ಸಂಬಂಧಿತ ನೀಲಿ ಪರದೆ ದೋಷಗಳು: IRQL_NOT_LESS_OR_EQUAL ಮತ್ತು DRIVER_IRQL_NOT_LESS_OR_EQUAL
ಈ ಸಮಸ್ಯೆಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಎರಡು ಶ್ರೇಷ್ಠ ದೋಷ ಪರಿಶೀಲನೆಗಳು IRQL_ಅಲ್ಲ_ಕಡಿಮೆ_ಅಥವಾ_ಸಮಾನ (0xA) y ಚಾಲಕ_IRQL_ಕಡಿಮೆ_ಅಥವಾ_ಸಮಾನ (0xD1)ಎರಡೂ IRQL ನಲ್ಲಿ ಪುಟಿಸಬಹುದಾದ (ಅಥವಾ ಅಮಾನ್ಯ) ವಿಳಾಸವನ್ನು ಪ್ರವೇಶಿಸುವ ಪ್ರಯತ್ನವನ್ನು ಸೂಚಿಸುತ್ತವೆ, ಅದು ತುಂಬಾ ಹೆಚ್ಚಾಗಿದೆ. ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಚಾಲಕರು ತಪ್ಪಾದ ವಿಳಾಸಗಳನ್ನು ಬಳಸುವುದರಿಂದ, ಕೆಟ್ಟ ಪಾಯಿಂಟರ್ಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದರಿಂದ ಅಥವಾ ಸೂಕ್ತವಲ್ಲದ ಮಟ್ಟದಲ್ಲಿ ಪುಟಿಸಬಹುದಾದ ಕೋಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದರಿಂದ ಸಂಭವಿಸುತ್ತದೆ.
ನ ನಿರ್ದಿಷ್ಟ ಸಂದರ್ಭದಲ್ಲಿ ಚಾಲಕ_IRQL_ಕಡಿಮೆ_ಅಥವಾ_ಸಮಾನ (0x000000D1), ನಿಯತಾಂಕಗಳು ಬಹಳ ಮಾಹಿತಿಯುಕ್ತವಾಗಿವೆ: 1) ಉಲ್ಲೇಖಿತ ಮೆಮೊರಿ ವಿಳಾಸ; 2) ಆ ಸಮಯದಲ್ಲಿ IRQL; 3) ಪ್ರವೇಶ ಪ್ರಕಾರ (0 ಓದು, 1 ಬರೆಯು, 2/8 ಕಾರ್ಯಗತಗೊಳಿಸು); 4) ಮೆಮೊರಿಯನ್ನು ಉಲ್ಲೇಖಿಸಿದ ಸೂಚನೆಯ ವಿಳಾಸ. ಡೀಬಗರ್ನೊಂದಿಗೆ ನೀವು ಬಳಸಬಹುದು ln
ಪ್ಯಾರಾಮೀಟರ್ 4 ರಲ್ಲಿ ಹತ್ತಿರದ ಚಿಹ್ನೆಯನ್ನು ಪಟ್ಟಿ ಮಾಡಿ ಮತ್ತು ಯಾವ ಕಾರ್ಯವು ಚಾಲನೆಯಲ್ಲಿದೆ ಎಂದು ತಿಳಿಯಿರಿ..
ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊಳ್ಳಬೇಕಾದ ಸಾಮಾನ್ಯ ಕಾರಣಗಳು
ನಿರ್ದಿಷ್ಟ ಕೋಡ್ನ ಹೊರತಾಗಿ, ಪುನರಾವರ್ತಿತ ಮಾದರಿಗಳಿವೆ. DISPATCH_LEVEL ಅಥವಾ ಹೆಚ್ಚಿನದಕ್ಕೆ ಅಮಾನ್ಯ ಪಾಯಿಂಟರ್ ಅನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ ಇದು ಖಂಡಿತವಾಗಿಯೂ ವಿಪತ್ತಿಗೆ ದಾರಿ ಮಾಡಿಕೊಡುತ್ತದೆ. ಆ ಮಟ್ಟದಲ್ಲಿ ಪುಟಿಸಬಹುದಾದ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸುವುದು ಅಥವಾ ಪುಟಿಸಬಹುದಾದ ಕೋಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು (ಉದಾ. ಪುಟಿಸಬಹುದಾದ ಎಂದು ಗುರುತಿಸಲಾದ ಕಾರ್ಯ), ಸಹ ದೋಷ ಪರಿಶೀಲನೆಯನ್ನು ಪ್ರಚೋದಿಸುತ್ತದೆ.
ಇತರ ಸಾಮಾನ್ಯ ಪ್ರಕರಣಗಳು ಸೇರಿವೆ ಈಗಾಗಲೇ ಡೌನ್ಲೋಡ್ ಮಾಡಲಾದ ಇನ್ನೊಂದು ಡ್ರೈವರ್ನಲ್ಲಿ ಒಂದು ಕಾರ್ಯವನ್ನು ಕರೆ ಮಾಡಿ (ತೂಗಾಡುವ ಕಾರ್ಯ ಪಾಯಿಂಟರ್), ಅಥವಾ ಅಮಾನ್ಯ ಕಾರ್ಯ ಪಾಯಿಂಟರ್ ಮೂಲಕ ಪರೋಕ್ಷವಾಗಿ ಆಹ್ವಾನಿಸಲಾಗಿದೆ. ಆಗಾಗ್ಗೆ, ವ್ಯವಸ್ಥೆಯು ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಗುರುತಿಸಲು ಸಾಧ್ಯವಾದರೆ, ನೀವು ಅದರ ಹೆಸರನ್ನು ನೀಲಿ ಪರದೆಯಲ್ಲಿಯೇ ನೋಡುತ್ತೀರಿ ಮತ್ತು ಅದನ್ನು ಸಹ ಉಳಿಸಲಾಗುತ್ತದೆ KiBugCheckDriver
, ಇದರೊಂದಿಗೆ ಪ್ರವೇಶಿಸಬಹುದು dx KiBugCheckDriver
WinDbg ನಿಂದ.
ಪ್ರಾಯೋಗಿಕ ವಿವರ: ಹೆಚ್ಚಿನ D1/A ನಲ್ಲಿ, ನಿಜವಾದ ಸಮಸ್ಯೆ IRQL ಅಲ್ಲ., ಬದಲಿಗೆ ಉಲ್ಲೇಖಿತ ಮೆಮೊರಿ ವಿಳಾಸ. ಅದಕ್ಕಾಗಿಯೇ ರೋಗನಿರ್ಣಯವನ್ನು ಕೇಂದ್ರೀಕರಿಸಲು 1, 3 ಮತ್ತು 4 ನಿಯತಾಂಕಗಳು ನಿರ್ಣಾಯಕವಾಗಿವೆ.
WinDbg ನೊಂದಿಗೆ ಡಯಾಗ್ನೋಸ್ಟಿಕ್ಸ್: ಉಪಯುಕ್ತ ಆಜ್ಞೆಗಳು ಮತ್ತು ನಿಯತಾಂಕ ಓದುವಿಕೆ
ಈ ಪ್ರಕರಣಗಳಲ್ಲಿ ಕೆಲಸ ಮಾಡಲು, WinDbg ಪ್ರಮುಖ ಸಾಧನವಾಗಿದೆ, ಮತ್ತು BSOD ಉಲ್ಲೇಖಿಸಿದರೆ ntoskrnl.exe ದೋಷವು ಕರ್ನಲ್ ಉಪವ್ಯವಸ್ಥೆಯಲ್ಲಿದೆಯೇ ಎಂಬುದರ ಕುರಿತು ಈ ಮಾಹಿತಿಯು ಬಹಳಷ್ಟು ಮಾರ್ಗದರ್ಶನವನ್ನು ಒದಗಿಸುತ್ತದೆ. !analyze -v
ದೋಷ ಪರಿಶೀಲನೆ, ಸ್ಟ್ಯಾಕ್ ಮತ್ತು ನೀವು ಅದೃಷ್ಟವಂತರಾಗಿದ್ದರೆ, ಒಳಗೊಂಡಿರುವ ಮಾಡ್ಯೂಲ್ನ ಸಾರಾಂಶವನ್ನು ಪಡೆಯಲು. ಡಂಪ್ ಕ್ಯಾಪ್ಚರ್ ಫ್ರೇಮ್ ಅನ್ನು ಒಳಗೊಂಡಿದ್ದರೆ, .trap
ವಿಫಲವಾದ CPU ಯ ಸನ್ನಿವೇಶದಲ್ಲಿ ನಿಮ್ಮನ್ನು ಇರಿಸುತ್ತದೆ.
ದಿ ಕೋಮಾಂಡೋಸ್ ರಾಶಿಯಂತೆ k
, kb
, kc
, kd
, kp
, kP
, kv
ಅವು ನಿಮಗೆ ವಿವಿಧ ಹಂತದ ಬ್ಯಾಕ್ಟ್ರೇಸ್ ವಿವರಗಳನ್ನು ತೋರಿಸುತ್ತವೆ. ln
ಪ್ಯಾರಾಮೀಟರ್ 4 ರಲ್ಲಿ ನೀವು ಬಿಟ್ಟುಬಿಡಬಹುದು ಸ್ಮರಣೆಯನ್ನು ಉಲ್ಲೇಖಿಸುವ ಸೂಚನೆಗೆ ಮತ್ತು ಹತ್ತಿರದ ಚಿಹ್ನೆಯನ್ನು ಪಡೆಯಿರಿ. ಮತ್ತು ಇಂಟರಪ್ಟ್ಗೆ ಮೊದಲು ಆದ್ಯತೆಯ ಮಟ್ಟ ಚಾಲನೆಯಲ್ಲಿದೆ ಎಂದು ನೀವು ಅನುಮಾನಿಸಿದರೆ, !irql
ಗುರಿ ಪ್ರೊಸೆಸರ್ಗಾಗಿ ಉಳಿಸಲಾದ IRQL ಅನ್ನು ನಿಮಗೆ ತೋರಿಸುತ್ತದೆ (ಉದಾ. DISPATCH_LEVEL).
ಪ್ಯಾರಾಮೀಟರ್ 1 ರ ದಿಕ್ಕನ್ನು ವಿಶ್ಲೇಷಿಸಲು, !pool
ಅದು ಪೇಜ್ಡ್ ಪೂಲ್ಗೆ ಸೇರಿದೆಯೇ ಎಂದು ನಿಮಗೆ ತಿಳಿಸುತ್ತದೆ; !address
y !pte
ಆ ಪ್ರದೇಶದ ಮೆಮೊರಿ ಮ್ಯಾಪಿಂಗ್ ಅನ್ನು ಆಳವಾಗಿ ಅಧ್ಯಯನ ಮಾಡಿ. ನೀವು ಬಳಸಬಹುದು ಮೆಮೊರಿ ಪ್ರದರ್ಶನ ಆಜ್ಞೆಗಳು ಪ್ರವೇಶಿಸಲು ಪ್ರಯತ್ನಿಸಿದ ವಿಷಯವನ್ನು ಪರಿಶೀಲಿಸಲು. ಅಂತಿಮವಾಗಿ, u
, ub
, uu
ಪ್ಯಾರಾಮೀಟರ್ 4 ರ ವಿಳಾಸದ ಸುತ್ತಲೂ ಡಿಸ್ಅಸೆಂಬಲ್ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.
ಮರೆಯಬೇಡಿ lm t n
ಲೋಡ್ ಮಾಡಲಾದ ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡಲು y !memusage
ಸಾಮಾನ್ಯ ಸ್ಮರಣ ಸ್ಥಿತಿಗಾಗಿ. ಒಂದು ವೇಳೆ KiBugCheckDriver
ಏನೋ ಇದೆ, dx KiBugCheckDriver
ಇದು ಯೂನಿಕೋಡ್ ಮಾಡ್ಯೂಲ್ನ ಹೆಸರನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ: ಒಂದು ವಿಶಿಷ್ಟ ಉದಾಹರಣೆಯಲ್ಲಿ, ದೋಷ ಪರಿಶೀಲನೆಯ ಸಮಯದಲ್ಲಿ "Wdf01000.sys" ಅನ್ನು ಒಳಗೊಂಡಿರುವ ಚಾಲಕವಾಗಿ ನೋಡಲಾಗಿದೆ.
ಸಿಸ್ಟಮ್ ಪರಿಕರಗಳು: ಡ್ರೈವರ್ ವೆರಿಫೈಯರ್, ಈವೆಂಟ್ ವೀಕ್ಷಕ ಮತ್ತು ಡಯಾಗ್ನೋಸ್ಟಿಕ್ಸ್
El ಚಾಲಕ ಪರಿಶೀಲಕ ನೈಜ ಸಮಯದಲ್ಲಿ ಚಾಲಕರ ನಡವಳಿಕೆಯನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ತಪ್ಪಾದ ಸಂಪನ್ಮೂಲ ಬಳಕೆಯನ್ನು (ಪೂಲ್ನಂತಹ) ಪತ್ತೆಹಚ್ಚಿದಾಗ ದೋಷಗಳನ್ನು ಒತ್ತಾಯಿಸುತ್ತದೆ, ಕೋಡ್ನ ಸಮಸ್ಯಾತ್ಮಕ ಪ್ರದೇಶವನ್ನು ಪ್ರತ್ಯೇಕಿಸಲು ಒಂದು ವಿನಾಯಿತಿಯನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ. ಇದನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗಿದೆ verifier
ನಿಂದ ಆಜ್ಞಾ ಪ್ರಾಂಪ್ಟ್ ಮತ್ತು ಹೆಚ್ಚಿನ ಓವರ್ಹೆಡ್ ಅನ್ನು ಸೇರಿಸುವುದನ್ನು ತಪ್ಪಿಸಲು ಸಾಧ್ಯವಾದಷ್ಟು ಚಿಕ್ಕ ಚಾಲಕರ ಗುಂಪನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದು ಸೂಕ್ತ.
ನೀವು WinDbg ನಲ್ಲಿ ನಿಮ್ಮನ್ನು ನೋಡದಿದ್ದರೆ, ಮೂಲಭೂತ ಕ್ರಮಗಳನ್ನು ಅನ್ವಯಿಸಿ: ನಿರ್ದಿಷ್ಟ ಸಾಧನ/ಚಾಲಕವನ್ನು ಸೂಚಿಸುವ ದೋಷಗಳಿಗಾಗಿ ಈವೆಂಟ್ ವೀಕ್ಷಕದಲ್ಲಿನ ಸಿಸ್ಟಮ್ ಲಾಗ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ; ನೀಲಿ ಪರದೆಯಿಂದ ಉಲ್ಲೇಖಿಸಲಾದ ಚಾಲಕವನ್ನು ನವೀಕರಿಸಿ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ; ನಿಮ್ಮ ವಿಂಡೋಸ್ ಆವೃತ್ತಿಯೊಂದಿಗೆ ಹಾರ್ಡ್ವೇರ್ ಹೊಂದಾಣಿಕೆಯನ್ನು ಪರಿಶೀಲಿಸಿ; ಮತ್ತು ನೀವು RAM ಅನ್ನು ಅನುಮಾನಿಸಿದರೆ ವಿಂಡೋಸ್ ಮೆಮೊರಿ ಡಯಾಗ್ನೋಸ್ಟಿಕ್ ಅನ್ನು ಬಳಸಿ. ಈ ಕ್ರಿಯೆಗಳು ಸರಳವಾಗಿದ್ದರೂ, ಅವರು ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಪ್ರಕರಣಗಳನ್ನು ಪರಿಹರಿಸುತ್ತಾರೆ.
ನಿಜ ಜೀವನದ ಪ್ರಕರಣಗಳು: BSOD ಗಳು ಯಾದೃಚ್ಛಿಕವಾಗಿ ಕಂಡುಬಂದಾಗ
Windows 10 Pro (AMD Ryzen 5 3400G CPU) ಹೊಂದಿರುವ ಬಳಕೆದಾರ, ಜಿಪಿಯು ಎನ್ವಿಡಿಯಾ ಜಿಫೋರ್ಸ್ ಜಿಟಿಎಕ್ಸ್ 1660 ಟಿಐ ಮತ್ತು ಗಿಗಾಬೈಟ್ ಬಿ450 ಆರಸ್ ಪ್ರೊ ವೈಫೈ ಬೋರ್ಡ್, 16 GB RAM) ಮಧ್ಯಂತರ "IRQL_LESS_OR_NOT_EQUAL" ಪರದೆಗಳನ್ನು ಅನುಭವಿಸುತ್ತಿತ್ತು. ನಾನು ಈಗಾಗಲೇ ಅಗತ್ಯ ಡ್ರೈವರ್ಗಳನ್ನು (ನೆಟ್ವರ್ಕ್, ಗ್ರಾಫಿಕ್ಸ್) ನವೀಕರಿಸಿದ್ದೇನೆ, ಎಲ್ಲಾ ವಿಂಡೋಸ್ ನವೀಕರಣಗಳನ್ನು ಸ್ಥಾಪಿಸಿದ್ದೇನೆ ಮತ್ತು ಮೆಮೊರಿ ಉಪಕರಣವನ್ನು ಚಲಾಯಿಸಿದ್ದೇನೆ, ಎಲ್ಲವೂ ಯಾವುದೇ ಸಮಸ್ಯೆಗಳನ್ನು ಪತ್ತೆಹಚ್ಚದೆ.
ಈ ರೀತಿಯ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ, ಮುಂದಿನ ಹಂತವೆಂದರೆ WinDbg ಬಳಸಿ ಡಂಪ್ಗಳನ್ನು ವಿಶ್ಲೇಷಿಸುವುದು. ಮತ್ತು ಮಾದರಿಗಳನ್ನು ನೋಡಿ: ಅದು ಬಿದ್ದಾಗ ಒಳಗೊಂಡಿರುವ ಪ್ರಕ್ರಿಯೆಗಳು (ಉದಾಹರಣೆಗೆ, explorer.exe
), ಗ್ರಾಫಿಕಲ್ ಇಂಟರ್ಫೇಸ್ ಮಾಡ್ಯೂಲ್ಗಳು (win32kfull.sys
) ಮತ್ತು ಕಾರ್ಯಗಳು ಉದಾಹರಣೆಗೆ xxxProcessNotifyWinEvent
ಸ್ಟ್ಯಾಕ್ನಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತಿದೆ. ಈ ಮಾಡ್ಯೂಲ್ ವಿಂಡೋಸ್ ಆಗಿದ್ದರೂ, ಟ್ರಿಗ್ಗರ್ ಹೆಚ್ಚಾಗಿ ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಡ್ರೈವರ್ (ಗ್ರಾಫಿಕ್ಸ್, ಇನ್ಪುಟ್, ಓವರ್ಲೇ, ಕ್ಯಾಪ್ಚರ್ ಕಾರ್ಡ್ಗಳು) ಆಗಿದ್ದು ಅದು ಮೆಮೊರಿಯನ್ನು ಸೂಕ್ತವಲ್ಲದ IRQL ನಲ್ಲಿ ಬಳಸುತ್ತದೆ ಮತ್ತು ದೋಷವು ಒಳಗೆ ಉದ್ಭವಿಸುತ್ತದೆ win32k
.
ಇಲ್ಲಿರುವ ಪ್ರಾಯೋಗಿಕ ಶಿಫಾರಸು ಎಂದರೆ ಓವರ್ಲೇ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ (ಕ್ಯಾಪ್ಚರ್, GPU OSD), ಆಕ್ರಮಣಕಾರಿ ಸಾಫ್ಟ್ವೇರ್ ಪೆರಿಫೆರಲ್ ಡ್ರೈವರ್ಗಳು (ಮ್ಯಾಕ್ರೋಗಳೊಂದಿಗೆ ಮೌಸ್ಗಳು/ಕೀಬೋರ್ಡ್ಗಳು), ಮತ್ತು ಗ್ರಾಫಿಕ್ಸ್ ಡ್ರೈವರ್ಗಳ ಬೀಟಾ ಆವೃತ್ತಿಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಅದನ್ನು ಕಿರಿದಾಗಿಸಿ. ಶಂಕಿತರ ಮೇಲೆ ಡ್ರೈವರ್ ವೆರಿಫೈಯರ್ ಅನ್ನು ಬಳಸುವುದು ಸ್ಪಷ್ಟವಾದ ಸ್ಟ್ಯಾಕ್ನೊಂದಿಗೆ ಸಮಸ್ಯೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.
ಬಹಳ ಸಾಮಾನ್ಯವಾದ ನೆಟ್ವರ್ಕ್ ಮಾದರಿ: ndis.sys ಯಾವಾಗಲೂ ಅಪರಾಧಿ ಅಲ್ಲ.
ಮತ್ತೊಂದು ವಿಶಿಷ್ಟ ಪ್ರಕರಣ: ndis.sys ನೊಂದಿಗೆ ಸ್ಕ್ರೀನ್ಶಾಟ್ (ವಿಂಡೋಸ್ ನೆಟ್ವರ್ಕ್ ಪದರ). ನಿಜವಾದ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ, ಸಿಸ್ಟಮ್ ಪ್ರಾರಂಭವಾದ ತಕ್ಷಣ ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತದೆ. ಪ್ರಾಯೋಗಿಕ ಪರಿಹಾರವೆಂದರೆ ಬೂಟ್ ಮಾಡುವುದು ಸುರಕ್ಷಿತ ಮೋಡ್ ನೆಟ್ವರ್ಕ್ ಕಾರ್ಯಗಳಿಲ್ಲದೆ, ತೆರೆಯಿರಿ ಸಾಧನ ನಿರ್ವಾಹಕ ಮತ್ತು ಸಮಸ್ಯೆಯನ್ನು ಪ್ರತ್ಯೇಕಿಸಲು "ನೆಟ್ವರ್ಕ್ ಅಡಾಪ್ಟರುಗಳು" ಅಡಿಯಲ್ಲಿ ಅಡಾಪ್ಟರುಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ.
ಆ ತಂಡದಲ್ಲಿ ಒಬ್ಬ ರಿಯಲ್ಟೆಕ್ ಪಿಸಿಐಇ ಜಿಬಿಇ ಫ್ಯಾಮಿಲಿ ಕಂಟ್ರೋಲರ್ ಮತ್ತು ಅಥೆರೋಸ್ AR5007G. ಎರಡನ್ನೂ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವ ಮೂಲಕ, ನಿಜವಾದ ಕಾರಣವೆಂದರೆ athrx.sys
(ಅಥೆರೋಸ್), ನೀಲಿ ಪರದೆಯಲ್ಲಿ ಉಲ್ಲೇಖಿಸಲಾಗಿದೆಯಾದರೂ ndis.sys
ಡಂಪ್ ಇದನ್ನು ದೃಢಪಡಿಸಿತು: ಸ್ಟ್ಯಾಕ್ ಹಾದುಹೋಯಿತು ndis!NdisFreeTimerObject
ಆದರೆ ತಪ್ಪಿತಸ್ಥ ಮಾಡ್ಯೂಲ್ athrx.sys
ಅಂತಿಮ ತಿದ್ದುಪಡಿ ಹೀಗಿತ್ತು ಸಾಧನವನ್ನು ಅಸ್ಥಾಪಿಸಿ ಮತ್ತು ನವೀಕರಿಸಿದ ಅಧಿಕೃತ ಚಾಲಕಗಳನ್ನು ಸ್ಥಾಪಿಸಿ. ಅಥೆರೋಸ್ ತಯಾರಕರ ವೆಬ್ಸೈಟ್ನಿಂದ. ನೈತಿಕತೆ: BSOD ನಲ್ಲಿ ಉಲ್ಲೇಖಿಸಲಾದ ಮಾಡ್ಯೂಲ್ ಪೀಡಿತ ಉಪವ್ಯವಸ್ಥೆಯ ಭಾಗವಾಗಿರಬಹುದು, ಮೂಲದಲ್ಲ.
ಬಳಕೆದಾರರಿಗೆ ವಿಶಿಷ್ಟ ಬೆಂಬಲ ಪ್ರತಿಕ್ರಿಯೆ ಮತ್ತು ತ್ವರಿತ ಹಂತಗಳು
ನಿಜವಾದ ಬೆಂಬಲ ವಿನಿಮಯದಲ್ಲಿ, ಒಬ್ಬ ತಂತ್ರಜ್ಞ ಉತ್ತರಿಸಿದ: "ಅನಾನುಕೂಲತೆಗಾಗಿ ಕ್ಷಮಿಸಿ. ಇದು ಡ್ರೈವರ್, ಮೆಮೊರಿ ಅಥವಾ ಆಂಟಿವೈರಸ್ ಸಮಸ್ಯೆಯಾಗಿರಬಹುದು. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಡ್ರೈವರ್ಗಳನ್ನು ನವೀಕರಿಸಿ ಮತ್ತು ಅದು ಮುಂದುವರಿದರೆ, ಮೆಮೊರಿ ಡಯಾಗ್ನೋಸ್ಟಿಕ್ ಅನ್ನು ರನ್ ಮಾಡಿ."ಇದು ಮೂಲಭೂತ ಆದರೆ ಮಾನ್ಯ ಸಲಹೆಯಾಗಿದೆ; ಆದಾಗ್ಯೂ, ದೋಷಗಳು ಮುಂದುವರಿದರೆ, ವೆರಿಫೈಯರ್ ಮತ್ತು ಡಂಪ್ ವಿಶ್ಲೇಷಣೆಯೊಂದಿಗೆ ಮುಂದುವರಿಯುವುದು ಒಳ್ಳೆಯದು.
ತಾಂತ್ರಿಕೇತರ ಬಳಕೆದಾರರಿಗೆ, ಸಮಂಜಸವಾದ ಪ್ರೋಟೋಕಾಲ್ ಹೀಗಿರುತ್ತದೆ: 1) ಸಿಸ್ಟಮ್ ಈವೆಂಟ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ, 2) ಕೀ ಡ್ರೈವರ್ಗಳನ್ನು ನವೀಕರಿಸಿ (ಚಿಪ್ಸೆಟ್/ನೆಟ್ವರ್ಕ್/ಗ್ರಾಫಿಕ್ಸ್), 3) RAM ಪರಿಶೀಲಿಸಿ ಸಂಯೋಜಿತ ಉಪಕರಣದೊಂದಿಗೆ, 4) ಪರೀಕ್ಷೆ ಬೂಟ್ ಕರ್ನಲ್/GUI ಗೆ ಹುಕ್ಗಳನ್ನು ಸೇರಿಸುವ ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಸಾಫ್ಟ್ವೇರ್ ಇಲ್ಲದೆ ಸ್ವಚ್ಛಗೊಳಿಸಿ, ಮತ್ತು 5) ಏನೂ ಸ್ಪಷ್ಟವಾಗಿಲ್ಲದಿದ್ದರೆ ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಡ್ರೈವರ್ಗಳಲ್ಲಿ ವೆರಿಫೈಯರ್ ಬಳಸಿ.
ಚಾಲಕ ಡೆವಲಪರ್ಗಳಿಗೆ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
ನೀವು ಅಭಿವೃದ್ಧಿ ಹೊಂದುತ್ತಿರುವಾಗ D1/A ಅನ್ನು ಆಕಸ್ಮಿಕವಾಗಿ ಕಂಡುಕೊಂಡರೆ, ಅದನ್ನು ಪರಿಶೀಲಿಸಿ ಚಾಲನೆಯಲ್ಲಿರುವ ದಿನಚರಿಯನ್ನು ಪುಟ ಮಾಡಬಹುದಾದಂತೆ ಗುರುತಿಸಲಾಗಿಲ್ಲ. DISPATCH_LEVEL ಅಥವಾ ಹೆಚ್ಚಿನದರಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವಾಗ ಪುಟ ಮಾಡಬಹುದಾದ ಕಾರ್ಯಗಳನ್ನು ಕರೆಯಬೇಡಿ. ಇದರಲ್ಲಿ ಪುಟ ಮಾಡಿದ ವಿಭಾಗಗಳಲ್ಲಿನ ಡೇಟಾಗೆ ಉಲ್ಲೇಖಗಳನ್ನು ತಪ್ಪಿಸುವುದು ಮತ್ತು DDK ಯಲ್ಲಿ ವಿವರಿಸಲಾದ ಕರ್ನಲ್ ಸಹಾಯಕರಿಗೆ IRQL ನಿರ್ಬಂಧಗಳನ್ನು ಗೌರವಿಸುವುದು ಸೇರಿದೆ.
ಹಂಚಿಕೊಂಡ ಡೇಟಾವನ್ನು ಸಿಂಕ್ರೊನೈಸ್ ಮಾಡಲು, "ಯಾವಾಗಲೂ ಒಂದೇ ಹೆಚ್ಚಿನ IRQL ನಲ್ಲಿ ಹಂಚಿಕೊಂಡ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ" ಎಂಬ ನಿಯಮವನ್ನು ಅನ್ವಯಿಸಿ. ಮತ್ತು ಸೂಕ್ತವಾದಾಗ ಸ್ಪಿನ್ ಲಾಕ್ಗಳನ್ನು ಬಳಸಿ. ಮಲ್ಟಿಪ್ರೊಸೆಸರ್ಗಳಲ್ಲಿ, IRQL ಮಾತ್ರ ವಿಭಿನ್ನ CPU ಗಳ ನಡುವೆ ಹೊರಗಿಡುವಿಕೆಯನ್ನು ಖಾತರಿಪಡಿಸುವುದಿಲ್ಲ; ಸ್ಪಿನ್ ಲಾಕ್ಗಳು IRQL ಅನ್ನು ಹೆಚ್ಚಿಸುತ್ತವೆ (DISPATCH_LEVEL ಗೆ) ಮತ್ತು ಕೋರ್ಗಳ ನಡುವೆ ಪ್ರವೇಶವನ್ನು ಸಂಘಟಿಸುತ್ತವೆ. ನೀವು ಸೂಕ್ಷ್ಮ ಹಾರ್ಡ್ವೇರ್ ರಿಜಿಸ್ಟರ್ಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸಬೇಕಾದರೆ, KeSynchronizeExecution
ಸರಿಯಾದ DIRQL ನಲ್ಲಿ ನಿರ್ಣಾಯಕ ವಿಭಾಗಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ.
ಯೋಜನೆಯು IRQL ಅನ್ನು ಹೆಚ್ಚಿಸುವ ಅಗತ್ಯವಿರುವಾಗ, ಯುಎಸ್ಎ KeRaiseIrqlToDpcLevel
DISPATCH_LEVEL ಗಾಗಿ ಅಥವಾ KeRaiseIrql
ಎಚ್ಚರಿಕೆಯಿಂದ, ಹಿಂದಿನ IRQL ಅನ್ನು ಉಳಿಸಲಾಗುತ್ತಿದೆ ಮತ್ತು ಅದನ್ನು ನಿಖರವಾಗಿ ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ KeLowerIrql
. ಒಂದು ಕ್ಷಣವಾದರೂ ಸಹ, ಇನ್ಪುಟ್ IRQL ಕೆಳಗೆ ಹೋಗಿ, ಇದು ಗಂಭೀರ ಸಿಂಕ್ರೊನೈಸೇಶನ್ ದೋಷವಾಗಿದೆ..
ಅಡಚಣೆಗಳು ಮತ್ತು ಹಾರ್ಡ್ವೇರ್ನೊಂದಿಗಿನ ಸಂಬಂಧ
IRQL ಎನ್ನುವುದು ವಿಂಡೋಸ್ ಅನ್ನು ಬಳಸುವ ಕಾರ್ಯವಿಧಾನವಾಗಿದೆ ಆದೇಶಗಳು ಆದ್ಯತೆಗಳು ಮತ್ತು ಕೆಲವು ಆಂತರಿಕ ಕಾರ್ಯಗಳನ್ನು ಅಡ್ಡಿಪಡಿಸುತ್ತವೆ.ವಾಸ್ತುಶಿಲ್ಪದ ಮಟ್ಟದಲ್ಲಿ, ಇದು "ಇಂಟರಪ್ಟ್", "ಇಂಟರಪ್ಟ್ ಹ್ಯಾಂಡ್ಲರ್" ಅಥವಾ "ಇಂಟರಪ್ಟ್ ಆದ್ಯತಾ ಮಟ್ಟ" ದಂತಹ ಪರಿಕಲ್ಪನೆಗಳಿಗೆ ಸಂಬಂಧಿಸಿದೆ ಮತ್ತು ಕ್ಲಾಸಿಕ್ ವೇದಿಕೆಗಳಲ್ಲಿ, ಪ್ರೋಗ್ರಾಮೆಬಲ್ ಇಂಟರಪ್ಟ್ ಕಂಟ್ರೋಲರ್ (PIC)ಇತರ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ, ಆದ್ಯತೆಯ ನಿಯಂತ್ರಣವನ್ನು ಕಾರ್ಯವಿಧಾನಗಳ ಮೂಲಕ ವ್ಯಕ್ತಪಡಿಸಲಾಗುತ್ತದೆ, ಉದಾಹರಣೆಗೆ spl en ಯುನಿಕ್ಸ್; ಸಾಮಾನ್ಯ ಕಲ್ಪನೆ ಒಂದೇ: ಯಾರು ಯಾರನ್ನು ಅಡ್ಡಿಪಡಿಸಬಹುದು.
ಸುಧಾರಿತ ಡೀಬಗ್ಗಿಂಗ್ ಸಲಹೆಗಳು
ಸ್ಟ್ಯಾಕ್ ಸೂಚಿಸುವ ಡಂಪ್ಗಳಲ್ಲಿ win32kfull!xxxProcessNotifyWinEvent
ದೋಷ ಪರಿಶೀಲನೆ 0xA/0xD1 ನೊಂದಿಗೆ, ಸಂದರ್ಭವನ್ನು ಪರೀಕ್ಷಿಸಿ .process
y .thread
(ಲಭ್ಯವಿದ್ದರೆ), ಈ ರೀತಿಯ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ನೋಡಿ explorer.exe
en !process 0 1
ಮತ್ತು ಓವರ್ಲೇಗಳು ಮತ್ತು GUI ಸಂವಹನ ಡ್ರೈವರ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ. ಹಲವು ಬಾರಿ ಸಮಸ್ಯೆ ಆ ಮಾರ್ಗದಲ್ಲಿ ಹೊರಹೊಮ್ಮುವ ಮೂರನೇ ವ್ಯಕ್ತಿಯಿಂದ ಅದು ಮೆಮೊರಿಯನ್ನು ಭ್ರಷ್ಟಗೊಳಿಸಲಾಗಿದೆ..
IRQL ಅನ್ನು ಪರೀಕ್ಷಿಸಲು ಮರೆಯಬೇಡಿ !irql
, ಮತ್ತು ವ್ಯತಿರಿಕ್ತತೆ: ನೀವು DISPATCH_LEVEL (2) ನಲ್ಲಿದ್ದರೆ ಮತ್ತು ಪ್ಯಾರಾಮೀಟರ್ 3 ಓದು/ಬರೆಯಿರಿ/ಕಾರ್ಯಗತಗೊಳಿಸು ಎಂದು ಸೂಚಿಸಿದರೆ ಪುಟರೂಪದ ಪುಟದಲ್ಲಿ, ಅದು ಏಕೆ ಬಿದ್ದಿದೆ ಎಂಬುದರ ಬಗ್ಗೆ ನಿಮಗೆ ಈಗಾಗಲೇ ಸುಳಿವು ಸಿಕ್ಕಿದೆ. ಆ ಸುಳಿವನ್ನು " ln
ನಿರ್ದಿಷ್ಟ ಕಾರ್ಯವನ್ನು ಪಡೆಯಲು ಪ್ಯಾರಾಮೀಟರ್ 4 ರಲ್ಲಿ.
ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ IRQL ಎಂದರೇನು? ಮತ್ತು ಅದು ಕರ್ನಲ್ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಗೆ ಹೇಗೆ ಹೊಂದಿಕೊಳ್ಳುತ್ತದೆ ಎಂಬುದು ಶಬ್ದವನ್ನು ಸಂಕೇತಗಳಿಂದ ಬೇರ್ಪಡಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ನೀವು ಬಳಕೆದಾರರಾಗಿದ್ದರೆ, ಗಮನಹರಿಸಿ ಚಾಲಕರು ಮತ್ತು ಯಂತ್ರಾಂಶ (ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಪರಿಶೀಲಕ, ಈವೆಂಟ್ಗಳು ಮತ್ತು ಪರೀಕ್ಷೆಗಳೊಂದಿಗೆ). ನೀವು ಅಭಿವೃದ್ಧಿಪಡಿಸಿದರೆ, IRQL, ಪುಟವಿಲ್ಲದ ಮೆಮೊರಿ ಮತ್ತು ಸ್ಪಿನ್ ಲಾಕ್ಗಳೊಂದಿಗೆ ಸಿಂಕ್ರೊನೈಸೇಶನ್ ನಿಯಮಗಳನ್ನು ಕಟ್ಟುನಿಟ್ಟಾಗಿ ಅನುಸರಿಸಿ. ಸರಿಯಾದ ಪರಿಕರಗಳೊಂದಿಗೆ (WinDbg, ಪರಿಶೀಲಕ) ಮತ್ತು ನಿಯತಾಂಕಗಳನ್ನು ಎಚ್ಚರಿಕೆಯಿಂದ ಓದುವುದು (1, 3, ಮತ್ತು 4), ಈ ದೋಷ ಪರಿಶೀಲನೆಗಳು ಇನ್ನು ಮುಂದೆ ನಿಗೂಢವಾಗಿಲ್ಲ. ಮತ್ತು ಅವು ಕ್ರಮಬದ್ಧವಾಗಿ ಪರಿಹರಿಸಬಹುದಾದ ಸಮಸ್ಯೆಗಳಾಗುತ್ತವೆ.
ಸಾಮಾನ್ಯವಾಗಿ ಬೈಟ್ಗಳು ಮತ್ತು ತಂತ್ರಜ್ಞಾನದ ಪ್ರಪಂಚದ ಬಗ್ಗೆ ಭಾವೋದ್ರಿಕ್ತ ಬರಹಗಾರ. ಬರವಣಿಗೆಯ ಮೂಲಕ ನನ್ನ ಜ್ಞಾನವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ನಾನು ಇಷ್ಟಪಡುತ್ತೇನೆ ಮತ್ತು ಈ ಬ್ಲಾಗ್ನಲ್ಲಿ ನಾನು ಮಾಡುತ್ತೇನೆ, ಗ್ಯಾಜೆಟ್ಗಳು, ಸಾಫ್ಟ್ವೇರ್, ಹಾರ್ಡ್ವೇರ್, ತಾಂತ್ರಿಕ ಪ್ರವೃತ್ತಿಗಳು ಮತ್ತು ಹೆಚ್ಚಿನವುಗಳ ಬಗ್ಗೆ ಎಲ್ಲಾ ಆಸಕ್ತಿದಾಯಕ ವಿಷಯಗಳನ್ನು ನಿಮಗೆ ತೋರಿಸುತ್ತೇನೆ. ಡಿಜಿಟಲ್ ಜಗತ್ತನ್ನು ಸರಳ ಮತ್ತು ಮನರಂಜನೆಯ ರೀತಿಯಲ್ಲಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುವುದು ನನ್ನ ಗುರಿಯಾಗಿದೆ.